Нужно заменить DLookup на что-то более эффективное - PullRequest
0 голосов
/ 11 июля 2019

Мне кажется, я просто оцепенел, думая об этом. У меня есть запрос Access, который делает именно то, что я хочу. Но я сделал это с IIF, который включает DLookup. Это займет несколько минут, чтобы бежать. Если я заменю DLookup просто цитатой, он запускается за считанные секунды. Так что я знаю, что именно задержка вызывает DLookup. Я изменил этот запрос в 20 раз, пытаясь использовать разные методы соединения, но я должен что-то упустить.

У меня есть несколько таблиц Официальное имя qryUniqueDevices не имеет смысла для 99% людей. Для большинства продуктов tblDeviceCategoryDB имеет хороший тип и категорию устройств. qryDevType имеет общие типы для всех устройств на основе официального имени. Если устройство не имеет определенного типа, указанного в tblDeviceCategoryDB, я хочу использовать универсальный тип, указанный в qryDevType.

SELECT qryUniqueDevices.[Official Name], qryUniqueDevices.Manufacturer, qryUniqueDevices.Model, 
IIf(IsNull([tblDeviceCategoryDB].[DevType]),
DLookUp("DevType","qryDevType","[Official Name] = '" & [qryUniqueDevices].[Official Name] & "'"),[tblDeviceCategoryDB].[DevType]) AS DevType, tblDeviceCategoryDB.DevCat, tblDeviceCategoryDB.ID
FROM qryUniqueDevices
LEFT JOIN tblDeviceCategoryDB ON (qryUniqueDevices.Model = tblDeviceCategoryDB.Model) AND (qryUniqueDevices.Manufacturer = tblDeviceCategoryDB.Manufacturer) AND (qryUniqueDevices.[Official Name] = tblDeviceCategoryDB.[Official Name]);

Если устройство не имеет определенного типа, указанного в tblDeviceCategoryDB, я хочу использовать универсальный тип, указанный в qryDevType. Прямо сейчас это работает, но требует 3-5 минут для запуска из-за этого глупого DLookup.

...