2013-04-20 69 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