У меня есть SQL 05 Сохраненная процедура, которая возвращает около 180 строк со структурой:Excel VBA - Создать Treeview из записей
ID | Имя | ParentId.
Что я хотел бы сделать, это создать Treeview на основе возвращенных записей. Ниже приведен образец, который я адаптировал из других мест на форуме (here)
Я почти делаю то, что хочу, но не совсем.
Это проблема, которая у меня есть, Корень добавлен нормально. Следующий слой вниз добавлен нормально. Однако он не знает, каким должен быть следующий ParentId. Должен ли я просто увеличивать переменную и пытаться найти совпадения? Думаю, я должен включить это в верхний метод.
Надеюсь, я не за горами, и нужно толчок в правильном направлении,
Большое спасибо заранее Майкл
В качестве последней вещи, проверяет BOF и EOF есть в цикле, как я похоже, у меня появилось много ошибок, если у меня их нет.
Private Sub MakeTree(ByVal rs As ADODB.Recordset)
rs.MoveFirst
Do Until rs.EOF
If (IsNull(rs.Fields("ParentID"))) Then
Call TVFunds.Nodes.Add(, , "Key" + CStr(rs.Fields("Id")), rs.Fields("Name"))
Call MsgBox("Key" + CStr(rs.Fields("Id")) + " " + rs.Fields("Name"), vbInformation, "Added Root")
Else
DrawNode rs, rs.Fields("ParentID"), rs.Fields("ID")
End If
If rs.BOF <> True And rs.EOF <> True Then
rs.MoveNext
End If
Loop
End Sub
Private Sub DrawNode(ByRef r As ADODB.Recordset, ByRef pId As Integer, ByRef Id As Integer)
r.MoveFirst
Do Until r.EOF
If (r.Fields("ParentId") = pId And r.Fields("Id") = Id) Then
Call TVFunds.Nodes.Add("Key" + CStr(r.Fields("ParentId")), tvwChild, "Key" + CStr(r.Fields("Id")), r.Fields("Name"))
Call MsgBox("Key" + CStr(r.Fields("ParentId")) + " Key" + CStr(r.Fields("Id")) + " " + r.Fields("Name"), vbInformation, "Added")
Id = Id + 1
DrawNode r, pId, Id
End If
If r.BOF <> True And r.EOF <> True Then
r.MoveNext
End If
Loop
End Sub
Привет, Спасибо за быстрый ответ, если есть какая-либо деталь вы не уверены в том, пожалуйста, спросите , Кроме того, я немного уточнил второй метод, чтобы предотвратить дублирование записей, вызвавших ошибку. Даже реализация Do While While, похоже, не возвращает истинную ошибку EOF true BOF на rs.MoveNext, хотя им кажется, что это временная проблема до тех пор, пока второй метод не будет работать правильно. еще раз спасибо – 2009-08-05 14:44:17