2009-08-05 28 views
0

構造体を使用して約180行を戻すSQL 05ストアドプロシージャがあります。Excel VBA - レコードセットからツリービューを作成

ID |名前| ParentId。

私がしたいのは、返されたレコードに基づいてツリービューを作成することです。 以下は、フォーラムの他の場所から変更したサンプルです(here

私はほとんどそれが私がしたいとは思っていません。

これは私が持っている問題です ルートが追加されました。 次のレイヤーダウンがOKに追加されます。 しかし、次の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 

答えて

1

まず最初に、Do Until ...ループは常に少なくとも1回実行されます。したがって、レコードセットに行がない場合でも、レコードセットはループに入ります。そのため、あなたはEOF/BOFチェックなしでこれらのエラーを取得していました。

Do While Not 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 

     rs.MoveNext 
Loop 
+0

こんにちは、 迅速な応答をありがとうを任意の詳細がある場合は、お問い合わせください上で確認されていません、:...このようにループしながら...がするまでループ

変更ものですか。また、エラーを引き起こした重複したエントリを防ぐためにもう少し2つ目の方法を改良しました。 Do While Notを実装しても、rs.MoveNextにEOF true BOF trueエラーがスローされているように見えますが、2番目のメソッドが正しく機能するまでは一時的な問題だと思っています。再度、感謝します –

関連する問題