powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / оригинальный Dlookup
9 сообщений из 9, страница 1 из 1
оригинальный Dlookup
    #32026104
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружилось что Dlast в ADP работает не так как в mdb т.е. выбирает не последнюю введенную запись , по крайней мере не всегда.

в процессе копания откопал следущее:
3-я переменная действительно полностью поддерживает синтаксис WHERE - в том числе и подчиненные запросы. Что выполняется гораздо быстрее чем один dlookup вложенный в другой.

DLookup("code", "project", "[counter] = (select max(counter) from project where client = " & Me.ПолеСоСписком38 & ")")

мне это показалось прикольным
kozin@mail.ru
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026109
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что считать последней записью если явно не указан Order? Сервер может вернуть записи ьез явной сортировки в любом порядке. Мой совет - забудб про Dlookup. Он в ряде случаев страшно тормозит. Лучше пропиши свою маленькую, оптимизированную под конкретный случай функцию.
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026120
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в данном случае - max(counter)- где counter поле счетчика и есть заменитель orderby аналогично можно и по другим полям

dlookup действительно медленная функция но если она запускается не в цикле а используется для одноразового запуска то не играет роли сколько она выполняется 0,1 сек или 0,0001
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026195
ДиД.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Мой совет - забудб про Dlookup
Так категорично не надо говорить. Чтобы вернуть одно значение в VBA, для него это в самый раз, чем открывать запрос. Dlookup вернет быстрее. Надо все проверять. Для одних случаев подойдет рекордсет, для других можно обойтись встроенными функциями.
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026256
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ДиД
>Так категорично не надо говорить. Чтобы вернуть одно значение в VBA, для него это в самый раз, чем открывать запрос.

А как ты думаешь каким способом Dlookup вытягивает данные с сервера? Или приведи пример, в котором Dlookup отработает быстрее нормально подготовленной ADODB.Command? Категорично утверждал, утверждаю и буду утверждать что Dlookup это вредное наследие mdb пока на фактах мне не докажут обратное. Пока факты говорят в пользу соего утверждения. Как ты правильно сказал "Надо все проверять." Вот и проверь. Я это уже проделывал.
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026264
ДиД.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже проделывал. Засекал время. Использовал функцию TimeGetTime() из библиотеки winmm.dll.
в большинстве случаев dlookup был быстрее. И это не "вредное наследие mdb". Я Вам доказывать ничего не буду: мне платят не за разговоры. Проверяйте, засекайте, пробуйте.
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026293
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно хотелось поиметь статистику быстродействия функций VB .
стндартным способом winmm.dll(через референсес)библиотека не подключается... говорит что несовметима с VB.

Не подкинешь код скоростемера?
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026297
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ДиД
>Я уже проделывал. Засекал время. Использовал функцию TimeGetTime() из библиотеки winmm.dll.

Ты бы еще к серверу точного времени обратился. Тогда вааще круто и неоспоримо...


>в большинстве случаев dlookup был быстрее. И это не "вредное наследие mdb". Я Вам доказывать ничего не буду: мне платят не за разговоры. Проверяйте, засекайте, пробуйте

Мне тоже не за чтение детективов деньги платят. Поэтому позволь усомниться в твоей компетентности и привести результат простенького теста:

Dim t As Single, i As Variant, j As Long, cmd As ADODB.Command, rs As ADODB.Recordset

'Ваш любимый Dlookup по таблице в 300000 записей
t = Timer()
For j = 200000 To 201000
i = DLookup("Event_id", "dbo.EventsContents", "Event_content_id = " & j)
Next
MsgBox Timer() - t
'8.5 секунд

'Вариант с командой и рекордсетом (обратите внимание что каждый раз создается и убивается и команда и рекордсет!)
t = Timer()
For j = 200000 To 201000
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "SELECT Event_id FROM dbo.EventsContents WHERE Event_content_id = " & j
cmd.CommandType = adCmdText
Set rs = cmd.Execute
i = rs("Event_id")
rs.Close
Set rs = Nothing
Set cmd = Nothing
Next
MsgBox Timer() - t
'3.1 секунды

'Вариант с сохраненной процедурой:
'Create Procedure sp_test @Event_content_id Int Output As
'Select @Event_content_id = Event_id From dbo.EventsContents Where Event_content_id = @Event_content_id
'Return
t = Timer()
For j = 200000 To 201000
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "sp_test"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@Event_content_id", adInteger, adParamInputOutput, , j)
cmd.Execute
i = cmd.Parameters(0)
Set cmd = Nothing
Next
MsgBox Timer() - t
'2.5 секунды

'И наконец вариант когда в цикле только присваивается и возвращается значение параметра
t = Timer()
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "sp_test"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@Event_content_id", adInteger, adParamInputOutput)
For j = 200000 To 201000
cmd.Parameters(0) = j
cmd.Execute
i = cmd.Parameters(0)
Next
Set cmd = Nothing
MsgBox Timer() - t
'1.15 секунды

Таким обоазом Dlookup проигрывает по скорости от 2.7 до 7.4 раза.

ЭТО ВРЕДНОЕ НАСЛЕДИЕ.
...
Рейтинг: 0 / 0
оригинальный Dlookup
    #32026382
ДиД.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вредное наследие.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / оригинальный Dlookup
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]