|
|
|
| Кто-нить пробовал в VBA в функции DLookup(Expr, Domain, Criteria) в качестве домена использовать переменную. Проблема в том, чтобы извлечь данные из таблицы, где Criteria повторяются. Думаю, что можно предварительно фильтрануть по Criteria, чтоб не повторялись. Конечно можно отдельным именованным отфильтрованным запросом, но мне нужно чтоб фильтр менялся при переборе рекордсета . | |
|
| |
|
|
|
|
| ElookUp не нашел здесь ничего, на русьимпорте тоже нету, а если dlookup - то тогда закопаться можно, еще может быть какое ключевое слово к нему есть?
или вот нашел и сделал примерно так:
lngPlanVolum = DLookup("ПланОбъем", "сМедОргОбъемДеят", "КодМедОрг=" & intMedOrgCode & " And [ЕдИзм] = '" & intEdIzm & "'")
? Но "Несоответствие типов данных в выражении условия отбора". | |
|
| |
|
|
|
| Это Дядя Федор опечатался........
Канешна же он имел ввиду - DLookup
ошибок не нашёл - я
"КодМедОрг = " & intMedOrgCode & " And [ЕдИзм] = '" & intEdIzm & "'"
----------------
если пробелов напихать?
"КодМедОрг = " & intMedOrgCode | |
|
| |
|
|
|
|
|
'БЫСТРЫЙ DLOOKUP
Public Function ELookup(Expr As String, Domain As String, Optional Criteria As Variant, _
Optional OrderClause As Variant) As Variant
On Error GoTo Err_ELookup
'Purpose: Faster and more flexible replacement for DLookup()
'Arguments: Same as DLookup, with additional Order By option.
'Return: Value of the Expr if found, else Null.
' Delimited list for multi-value field.
'Author: Allen Browne.
'Updated: December 2006, to handle multi-value fields (Access 2007 and later.)
'Examples:
' 1. To find the last value, include DESC in the OrderClause, e.g.:
' ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC")
' 2. To find the lowest non-null value of a field, use the Criteria, e.g.:
' ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")
'Note: Requires a reference to the DAO library.
Dim db As dao.Database 'This database.
Dim rs As dao.Recordset 'To retrieve the value to find.
Dim rsMVF As dao.Recordset 'Child recordset to use for multi-value fields.
Dim varResult As Variant 'Return value for function.
Dim strsql As String 'SQL statement.
Dim strOut As String 'Output string to build up (multi-value field.)
Dim lngLen As Long 'Length of string.
Const strcSep = "," 'Separator between items in multi-value list.
'Initialize to null.
varResult = Null
'Build the SQL string.
strsql = "SELECT TOP 1 " & Expr & " FROM " & Domain
If Not IsMissing(Criteria) Then
strsql = strsql & " WHERE " & Criteria
End If
If Not IsMissing(OrderClause) Then
strsql = strsql & " ORDER BY " & OrderClause
End If
strsql = strsql & ";"
'Lookup the value.
Set db = DBEngine(0)(0)
Set rs = db.OpenRecordset(strsql, dbOpenForwardOnly)
If rs.RecordCount > 0 Then
'Will be an object if multi-value field.
If varType(rs(0)) = vbObject Then
Set rsMVF = rs(0).Value
Do While Not rsMVF.EOF
If rs(0).Type = 101 Then 'dbAttachment
strOut = strOut & rsMVF!Filename & strcSep
Else
strOut = strOut & rsMVF![Value].Value & strcSep
End If
rsMVF.MoveNext
Loop
'Remove trailing separator.
lngLen = Len(strOut) - Len(strcSep)
If lngLen > 0& Then
varResult = Left(strOut, lngLen)
End If
Set rsMVF = Nothing
Else
'Not a multi-value field: just return the value.
varResult = rs(0)
End If
End If
rs.Close
'Assign the return value.
ELookup = varResult
Exit_ELookup:
Set rs = Nothing
Set db = Nothing
Exit Function
Err_ELookup:
MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.Number
Resume Exit_ELookup
End Function
|
Проверял. Работает действительно быстрее DLOOKUP | |
|
| |
|
|