【问题标题】:How to search multiple fields of an access database in VB using code如何使用代码在VB中搜索访问数据库的多个字段
【发布时间】:2016-01-23 02:10:22
【问题描述】:

我创建了一个程序,它显示来自访问数据库中不同表的数据(不使用向导连接到数据库。即所有连接都经过硬编码),我创建了一个简单的搜索,它通过一个字段进行搜索在一张桌子上。但是,我想创建一个函数,允许我搜索表中的所有字段。下面是我创建的简单搜索功能。

     Public Sub Search()         
    con.Open()
    Dim dt As New DataTable("Table1")
    Dim rs As New OleDb.OleDbDataAdapter("Select * from Table1 where FirstName = '" & txtTabel1.Text & "'", con)

    rs.Fill(dt)
    dgvTabel2.DataSource = dt
    dgvTabel2.Refresh()

    rs.Dispose()
    con.Close()  
     end sub

新函数应该是这样的

   Public Sub SearchHard(TableName As String)
    con.Open()
    Dim dt As New DataTable("TableName")
    Dim rs As New OleDb.OleDbDataAdapter(("Select * from " & TableName & " where FirstName = '" & txtTabel1.Text & "'") Or ("Select * from " & TableName & " where LastName = '" & txtTabel1.Text & "')"), con)
    'SELECT * FROM MyTable WHERE FirstName LIKE '% txtTable1.text %' OR LastName LIKE '%txtTable1.tetx%'

    rs.Fill(dt)
    dgvTabel1.DataSource = dt
    dgvTabel1.Refresh()

    rs.Dispose()
    con.Close()
End Sub

如果该函数可以接受一个参数来选择不同的表以减少过度使用代码,这也是一个很大的优势。 任何和所有的帮助将不胜感激

用于搜索的工作代码。

    con.Open()
    Dim dt As New DataTable("Table1")
    Dim rs As New OleDb.OleDbDataAdapter("SELECT * FROM  Table1  WHERE (FirstName = '" & txtTabel1.Text & "') or (LastName = '" & txtTabel1.Text & "')", con)
    rs.Fill(dt)
    dgvTabel1.DataSource = dt
    dgvTabel1.Refresh()

    rs.Dispose()
    con.Close()

【问题讨论】:

    标签: database vb.net ms-access vba


    【解决方案1】:

    除了@andre451 已经提到的内容之外,如果您想搜索多个表,可以使用union

    SELECT field_1 , field_2
    FROM table_1
    WHERE field_3 = 'value' or field_4 = 'value'
    UNION [ALL]
    SELECT field_100 , field_200
    FROM table_2
    WHERE field_300 = 'value' or field_400 = 'value'
    

    只要您的field_1field_100 匹配数据类型和字段计数匹配

    【讨论】:

      【解决方案2】:

      你有一些错误的引号:

      "Select * from Table where Field1 = '" & txtTabel1.Text & "'" or Field2 = '" & txtTabel1.Text"'"
      

      应该是

      "Select * from Table where Field1 = '" & txtTabel1.Text & "' or Field2 = '" & txtTabel1.Text & "'"
      

      现在你当然可以像这样使用你的参数TableName

      "Select * from " & TableName & " where Field1 = '" & txtTabel1.Text & "'"
      

      但是不同的表会有不同的字段名称,所以这不会真正起作用。最后,您必须添加大量参数并重新发明 SQL。

      更好的解决方案是将完整的 SQL SELECT 字符串传递给您的函数。

      【讨论】:

      • @ Andre451 非常感谢,带有参数的标准搜索是有效的,但是当我添加一个或者它给出一个错误“从字符串转换”选择 * from Table1 where First”键入“Long” ' 无效。”指向 "rs.fill(dt)。新代码 =(("Select * from " & TableName & " where FirstName = '" & txtTabel1.Text & "'") 或 ("Select * from " & TableName & " where LastName = '" & txtTabel1.Text & "')"), con)
      • @Tyler_Coder:不是(SELECT * FROM table WHERE field1 = 'x') OR (SELECT * FROM table WHERE field2 = 'x'),而是SELECT * FROM table WHERE (field1 = 'x') OR (field2 = 'x')
      • 非常感谢您对我的所有错误的帮助和包容,我终于解决了我的问题,一切正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2022-01-19
      相关资源
      最近更新 更多