-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathRecursiveFind.vb
More file actions
34 lines (23 loc) · 1.14 KB
/
RecursiveFind.vb
File metadata and controls
34 lines (23 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'Рекурсивный поиск
Public Function FindAllAnalog(spPartNum, Optional bpDebug = False)
Dim aAnalog, rsdao, SQL, sDebug
aAnalog = Array(spPartNum)
Do While UBound(aAnalog) >= 0
FindAllAnalog = ConcatArray(FindAllAnalog, aAnalog)
'здесь нужно заменить запрос который вернет новый уровень иерархии без повторений
SQL = printf("select PN from (" & _
"select [PN замена] as PN from замены_аналоги where PN in {0} " & _
"union select PN from замены_аналоги where [PN замена] in {0} " & _
") where not PN in {1}", ArrayToInStatement(aAnalog), ArrayToInStatement(FindAllAnalog))
aAnalog = Array()
Set rsdao = CurrentProject.Connection.Execute(SQL)
Do While Not rsdao.EOF
addInArray aAnalog, rsdao.Fields("PN").Value
rsdao.MoveNext
Loop
If bpDebug And UBound(aAnalog) >= 0 Then addInArray FindAllAnalog, "-> "
rsdao.Close
Set rsdao = Nothing
Loop
FindAllAnalog = Filter(FindAllAnalog, spPartNum, False)
End Function