ник: Vik
Думаю, основная проблема по скорости - обработка строк в условиях запроса и
двойное открывание одной и той-же таблицы.
Еще один вариант:
Function HaveThisParenstID(ThisID As Long, ThisParent as Long) As Boolean
Dim rst As DAO.Recordset
HaveThisParenstID = False
Set rst = Workspaces(0).Databases(0).OpenRecordset("Departments", dbOpenSnapshot)
StartFind:
rst.FindFirst "DepID = " & ThisID
If rst.NoMatch = False Then
ThisID = rst!ParentID
If ThisID = ThisParent Then
HaveThisParenstID = True
GoTo EndFunction
EndIf
GoTo StartFind
End If
EndFunction:
rst.Close
Set rst = Nothing
End Function
|
Еще - сделайте Parent-поле индексированным.
Возможны ошибки, писал в броузере, но суть должна быть понятна.
После запросом выбираете все записи, для коих результат этой функции = True
Там еще раньше было предложение заполнять через функцию временную таблицу.