Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кто-нить пробовал в VBA в функции DLookup(Expr, Domain, Criteria) в качестве домена использовать
 
 автор: ser60   (19.04.2011 в 21:21)   личное сообщение
 
 

Кто-нить пробовал в VBA в функции DLookup(Expr, Domain, Criteria) в качестве домена использовать переменную. Проблема в том, чтобы извлечь данные из таблицы, где Criteria повторяются. Думаю, что можно предварительно фильтрануть по Criteria, чтоб не повторялись. Конечно можно отдельным именованным отфильтрованным запросом, но мне нужно чтоб фильтр менялся при переборе рекордсета .

  Ответить  
 
 автор: Дядя Федор   (19.04.2011 в 21:25)   личное сообщение
 
 

Поищи по поиску ElookUp

  Ответить  
 
 автор: ser60   (19.04.2011 в 21:57)   личное сообщение
 
 

ElookUp не нашел здесь ничего, на русьимпорте тоже нету, а если dlookup - то тогда закопаться можно, еще может быть какое ключевое слово к нему есть?

или вот нашел и сделал примерно так:
lngPlanVolum = DLookup("ПланОбъем", "сМедОргОбъемДеят", "КодМедОрг=" & intMedOrgCode & " And [ЕдИзм] = '" & intEdIzm & "'")
? Но "Несоответствие типов данных в выражении условия отбора".

  Ответить  
 
 автор: час   (19.04.2011 в 23:20)   личное сообщение
 
 

Это Дядя Федор опечатался........
Канешна же он имел ввиду - DLookup
ошибок не нашёл - я
"КодМедОрг = " & intMedOrgCode & " And [ЕдИзм] = '" & intEdIzm & "'"
----------------
если пробелов напихать?
"КодМедОрг = " & intMedOrgCode

  Ответить  
 
 автор: ser60   (20.04.2011 в 04:24)   личное сообщение
 
 


"КодМедОрг = " & intMedOrgCode)


так работает, но этого недостаточно. Но тут покопавшись в http://hiprog.com/forum/read.php?id_forum=1&id_theme=1850&page=1
увидел , что оказывается можно еще одно условие присобачить (типа And [ЕдИзм] = '" & intEdIzm & "'" ) вместо дополнительного формирования именованного предварительного запроса-фильтра. И вот оно то не работает
а пробелы то куда пихать? пихнуть и посмотреть не трудно, но куда?

ааа... вот увидел свой глюк: нужно было And [ЕдИзм] = " & intEdIzm)
Спс за участие в обсуждении!

  Ответить  
 
 автор: Дядя Федор   (20.04.2011 в 08:15)   личное сообщение
 
 


'БЫСТРЫЙ 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

  Ответить  
 
 автор: час   (20.04.2011 в 08:54)   личное сообщение
 
 

  Ответить  
 
 автор: ser60   (20.04.2011 в 20:34)   личное сообщение
 
 

закопали меня

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList