0

6 つのグループボックスを含むフォームがあり、各グループボックスには 180 個のテキストボックスと 2 つのコンボボックスがあります。最初のコンボボックスから値を選択すると、2 番目のコンボボックスにテーブルから必要なデータが入力されます。私の要件は、2 番目のコンボボックスから値を選択すると、同じテーブルからフィルター処理されたデータが残りのテキスト ボックスを埋める必要があるということです。私が使用しているコードは次のとおりです。

    Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
    Dim strConnection As String = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\\users\\brisingr\\documents\\123\database.mdb"
    Dim objConnection As New OleDbConnection(strConnection)

    Dim strsql As String
    'strsql = "Select * from '" & ComboBox1.Text & "' where Style = '" & ComboBox2.Text & " '"
    Dim a As String
    Dim b As String
    Dim c As String
    Dim d As String
    a = "Select * from ["
    b = ComboBox1.Text
    c = "] where Style = ["
    d = ComboBox2.Text
    strsql = a & b & c & d & "]"
    Dim objCommand As New OleDbCommand(strsql, objConnection)

    Dim objDataAdapter As New OleDbDataAdapter(objCommand)
    Dim objDataTable As New DataTable("Buyers")
    objDataAdapter.Fill(objDataTable)

    objConnection.Close()
    objConnection.Dispose()
    objConnection = Nothing
    objCommand.Dispose()
    objCommand = Nothing
    objDataAdapter.Dispose()
    objDataAdapter = Nothing

    For i As Integer = 1 To 60
        Me.Controls("L1Ob" & i).Text = objDataTable.Rows(0)("Operation" & i)
    Next

End Sub

ここで「操作」 & (i) はデータベースのフィールド名を指し、操作 1、操作 2 などのように名前が付けられています...

このコードは私には機能していないようです。助けてください..

4

1 に答える 1

1

ここには多くの問題があります

Dim a As String
Dim b As String
Dim c As String
Dim d As String
a = "Select * from ["
b = ComboBox1.Text
c = "] where Style = ["
d = ComboBox2.Text
strsql = a & b & c & d & "]"
Dim objCommand As New OleDbCommand(strsql, objConnection)

まず、フィールドに渡された値を角括弧で囲みますStyle
これは有効な構文ではありません。Jet エンジンは、それがパラメーターであると想定します。実際には、パラメーターを渡すのが正しい方法です。

a = "Select * from [" 
b = ComboBox1.Text
c = "] where Style = ?"
strsql = a & b & c
Dim objCommand As New OleDbCommand(strsql, objConnection)
objCommand.Parameters.AddWithValue("@p1", ComboBox2.Text)
Dim objDataAdapter As New OleDbDataAdapter(objCommand)
Dim objDataTable As New DataTable("Buyers")
objDataAdapter.Fill(objDataTable)

フィールドの値はStyleパラメーターで渡されます。これにより、プレースホルダー (?) をコンボボックスからフレームワークに取得された値に置き換える作業が残ります。
エラーやSQLインジェクションを回避する方がよいことを知っているはずです。

このコードはまだ弱いです。テーブル名の代わりに悪意のあるテキストを含むように、最初のコンボボックス 1 の内容を変更できないことを絶対に確認する必要があります。

于 2013-04-20T10:57:58.787 に答える