Field2.IsComplex DAO.Property :
مقدار True(عددی غیر صفر) یا False(برابرصفر) را که نشان دهنده وجود یک دیتا تایپ چند مقداری است را باز می گرداند.... ( multi-valued data type )
Null=No Valid Data
named-argument
Join:
اگرExpression خالی باشد Set Result=Null
Static Values As New Collection
Set Records=CurrentDb.OpenRecordSet....
(dbOpenSnapShot)
CollValues Records , Delimiter , Result
Values.Add Result
Join=Result
CollValues:
ByRef Rec As DAO.RecordSet
ByRef Delimiter
ByRef Result
Dim SubRec As DAO.RecordSet
Dim Value As Variant
'If Rec.RecordCount>0 Then
While Not Rec.EOF
Value=Rec.Field(0).Value
If Rec.Fields(0).IsComplex Then
Set SubRec=Rec.Fields(0).Value
CollValues SubRec , Delimiter , Result
ElseIf Nz(Value)="" Then
ElseIf IsEmpty(Result)
Result=Value
Else
Result=Result & Delimiter & Value
End If
Rec.MoveNext
Wend
'Else
'Result=Null
'End If
Expression,Domain,Criteria :
Const SqlMask As String = "Select {0} From {1} {2}"
Const SqlLead As String = "Select "
Const SubMask As String = "({0}) As T"
Const FilterMask As String = "Where {0}"
Dim Sql As String
Dim SqlSub As String
Dim Filter As String
اگر Expression خالی باشد باید فکر چاره ای باشید و همینطور آرگومان های بعدی
اگر Select را در Domain( که نام جدول یا کوئری و یا زبان اس کیو ال ممکن است داخلش نوشته شده باشد ) یافت نتیجتا Domain یک عبارت اس کیو ال است.
If InStr(1, LTrim(Domain), SqlLead, vbTextCompare) = 1 Then
در اینجا اگر در آرگومان Domain عبارت Select را بیابد متغیر SqlSub می شود جایگزین کردن Domain با {0}
SqlSub = Replace(SubMask, "{0}", Domain)
Else
در غیر اینصورت Domain نام جدول یا کوئری است.
SqlSub = Domain
End If
اگر آرگومان Criteria پر باشد
If Trim(Criteria) <> "" Then
ساخت یک شرط را خواهیم داشت . که عبارت داخل Criteria را بجای {0} در FilterMask قرار خواهد داد.
Filter = Replace(FilterMask, "{0}", Criteria)
End If
حالا ساخت نهایی Sql که باتابع Replace تودرتو یا Nested Replace انجام گرفته و اگر اشتباهی در نوشتار نداشته باشیم خروجی یک عبارت Sql درست خواهد بود.
Sql = Replace(Replace(Replace(SqlMask, "{0}", Expression), "{1}", SqlSub), "{2}", Filter)
یعنی درواقع در Replace های بالا جای ۲ ۱ ۰ عبارت یا رشته هایی که داخل آرگومان ها هستند قرار داده شدِس.
Example :
Expression="[First Name] & ' ' & [Last Name] & '<' & [Email Address] & '>'"
Domain="Tbl1"
Criteria="[Job]='" & [Job] & "'"
Change To Sql :
"Select [First Name] & ' ' [Last Name] & '<' & [Email Address] & '>' From Tbl1 Where [Job]=' & [Job] & '"
با قرار دادن Optional قبل از آرگومان ها می شود آنها را در تابع اختیاری کرد نه اجباری ( Required ).
وقتی دیتا تایپ فیلدی عددی نیست مثل نام بای از تک کوتیشن بین آنها استفاده کنیم :
"FirstName='" & Variable1 & "'"
اگر بنویسید :
"FirstName=" & Variable1 & ""
قطعا دچار خطا خواهید شد ، برای دیتا تایپ عددی نیازی به قرار دادن تک کوتیشن ها ندارید.