Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
ник: Lukas Давай я лучше свой пример покажу: Здесь функция обновляет значения поля WithChildren (Text(255)), в котором собираются IDItem (Long, Counter) записей через запятую (Свой +детки) , для каждой записи таблицы. То есть, если детей нет, то только свой IDItem, если есть, то свой IDItem и IDItem-ы деток, внуков, правнуков и т.д. через запятую. В поле IDParent (Long) - значение IDItem родителя. Далее запросом с IN () можно будет считать суммы. Вызывать без параметров, так: Call FillWithChildren() или просто: FillWithChildren Должен признаться, я не специалист по деревьям и по ADO. Возможно есть более простые решения.
Public Function FillWithChildren(Optional IDItem As Long = 0, Optional rst As ADODB.Recordset, Optional Children As String) Dim varBmk As Variant If rst Is Nothing Then Set rst = New ADODB.Recordset rst.Open "SELECT IDItem, IDParent, WithChildren FROM tblComBar ORDER BY IDItem DESC", CurrentProject.Connection, adOpenKeyset, adLockOptimistic Do Until rst.EOF '"обNullим" поле "WithChildren" rst(2) = Null rst.Update rst.MoveNext Loop rst.MoveFirst Do Until rst.EOF If Not rst.EOF And Not rst.BOF Then varBmk = rst.Bookmark Children = "" If IsNull(rst.Collect(2)) Then ' Только если заранее "обNullили" поле "WithChildren" всех строк. FillWithChildren rst.Collect(0), rst, Children Else Children = rst.Collect(2) End If rst.Bookmark = varBmk 'Debug.Print rst.Collect(0) & Children rst(2) = rst.Collect(0) & Children rst.Update rst.MoveNext End If Loop rst.Close Set rst = Nothing Else rst.MoveFirst Do Until rst.EOF rst.Find "IDParent=" & IDItem If Not rst.EOF And Not rst.BOF Then If IsNull(rst.Collect(2)) Then varBmk = rst.Bookmark Children = Children & "," & rst.Collect(0) FillWithChildren rst.Collect(0), rst, Children rst.Bookmark = varBmk Else Children = Children & "," & rst.Collect(2) End If rst.MoveNext End If Loop End If End Function
Ваше имя:
Пароль:
Сообщение:
Прикрепить:
Для вставки смайлов в текст щелкните по значку.