Ветеран
Сообщения: 27449
Благодарности: 8087
|
Профиль
|
Отправить PM
| Цитировать
Цитата lxa85:
Потому что средствами Access это проблематично. »
|
Почему? Обычная рекурсия (концепт, без необходимых проверок):
читать дальше »
Код: 
Option Compare Database
Option Explicit
Sub Sample(strFIO As String)
Dim objRS As Recordset
Dim lngLevel As Long
lngLevel = 0
Set objRS = CurrentDb.OpenRecordset("SELECT * FROM Genealogy WHERE [ФИО] = '" & strFIO & "'")
GetParents objRS.Fields.Item("ID").Value, lngLevel
End Sub
Sub GetParents(lngID As Long, ByVal lngLevel)
With CurrentDb.OpenRecordset("SELECT [ФИО], [Отец], [Мать] FROM Genealogy WHERE [ID] = " & lngID & "")
With .Fields
Debug.Print String(lngLevel, vbTab) & .Item("ФИО").Value
lngLevel = lngLevel + 1
If Not IsNull(.Item("Отец").Value) Then
GetParents .Item("Отец").Value, lngLevel
End If
If Not IsNull(.Item("Мать").Value) Then
GetParents .Item("Мать").Value, lngLevel
End If
End With
End With
End Sub
Примерный результат работы по вызову «Sample("Я")»:
Код: 
Я
Папа
Дед (отец отца)
Бабка (мать отца)
Мама
Дед (отец матери)
Бабка (мать матери)
|
Отправлено: 11:41, 23-04-2013
| #3
|