VBNET について簡単な質問があります。現在、VS 2012 Express と Microsoft Access をデータベースとして使用しています。
私の質問は、フォーム自体にクエリを配置する代わりに、クエリをモジュールに配置するにはどうすればよいですか? frmStock にこの関数があるとしましょう:
からのストック:
Public Sub FillCategory(ByVal Key As String, ByVal Txt As String, ByVal N As TreeNode)
Dim TD As TreeNode
If N Is Nothing Then
TD = tvCategory.Nodes.Add(Key, Txt)
Else
TD = N.Nodes.Add(Key, Txt)
End If
Dim cmd As New OleDbCommand("SELECT * FROM Category WHERE Category_Parent = ?", conn)
cmd.Parameters.AddWithValue("Category_Parent", Key)
Dim dr = cmd.ExecuteReader
Do While dr.Read()
FillCategory(dr("Category_ID"), dr("Category_Name"), TD)
Loop
dr.Close()
cmd.Dispose()
End Sub
移動したい
Dim cmd As New OleDbCommand("SELECT * FROM Category WHERE Category_Parent = ?", conn)
代わりにモジュールに。
私はやってみました:
Module queryCollection
Public getCategoryParent As New OleDbCommand( _
"SELECT * FROM Category WHERE Category_Parent = ?", conn)
End Module
そして、FillCategory 関数を次のように変更しました。
Public Sub FillCategory(ByVal Key As String, ByVal Txt As String, ByVal N As TreeNode)
Dim TD As TreeNode
If N Is Nothing Then
TD = tvCategory.Nodes.Add(Key, Txt)
Else
TD = N.Nodes.Add(Key, Txt)
End If
getCategoryParent.Parameters.AddWithValue("Category_Parent", Key)
Dim dr = getCategoryParent.ExecuteReader
Do While dr.Read()
FillCategory(dr("Category_ID"), dr("Category_Name"), TD)
Loop
dr.Close()
getCategoryParent.Dispose()
End Sub
更新:
私の問題のスクリーンショット:
私のデータベース: http://puu.sh/39CMV.PNG
クエリをモジュールに移動する前に: http://puu.sh/39D0M.PNG
クエリをモジュールに移動した後: puu.sh/39CVV.PNG
1 回しか実行されないように見えますが (?)、これはなぜですか?また、モジュールでクエリを宣言する適切な方法は何ですか?
私は実際に大量のクエリを持っています。より整理されたコーディングのためにそれらを 1 か所に保存したいと考えています。