2013-04-20 70 views
0

我有一個包含6個組框的表單,每個組框包含180個文本框以及兩個組合框。在從第一個組合框中選擇一個值時,第二個組合框將從表中填充所需的數據。我的要求是,從第二個組合框中選擇一個值時,來自同一個表的過濾數據應該填充剩餘的文本框。我使用的代碼如下:一次性將數據填充到多個文本框

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 

這裏的「操作」 &(我)是指數據庫,已命名爲喜歡的operation1,操作2等的字段名...

這段代碼似乎不適合我。請幫助..

+0

Me.Controls指的是直接包含在窗體中的控件。如果文本框位於組框中,您需要使用該組合框的控件集合 – Steve 2013-04-20 10:41:12

+0

@Steve:那麼我該怎麼做?我仍然在學習vb.net ... – SaurabhSuman 2013-04-20 10:42:10

+0

順便說一下,說'代碼似乎沒有工作'真的很煩人。如果你不告訴我們什麼不工作,我們如何能夠幫助你? – Steve 2013-04-20 10:42:23

回答

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的內容不能被修改爲包含惡意文本而不是表名稱

+0

@ p1是什麼?因爲現在我得到的錯誤是「沒有給出一個或多個必需參數的值」。 至於方括號,我把它們放在那裏作爲後端是MS Access和多字數據搜索,就像「I See you」一樣,方括號是我知道的最好的解決方案......如果你知道一些其他的解決方案,請幫助我... – SaurabhSuman 2013-04-20 11:04:07

+0

我確保combobox1文本與購買者姓名沒有區別,方法是擁有一張包含表格列表的表格,該表格通過添加一個新表格進行更新一個查詢,並顯示在combobox1中顯示的值是從表中列出的表..如果有任何其他方式這樣做,請告訴我... – SaurabhSuman 2013-04-20 11:09:47

+0

您需要查看什麼是確切的命令文本是發送到數據庫引擎。在strSql構建之後設置一個斷點,並讓我看看出現錯誤的確切文本是什麼 – Steve 2013-04-20 11:54:08