如何使用代码在VB中搜索访问数据库的多个字段

时间:2015-10-23 13:51:50

标签: database vb.net ms-access access-vba

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

     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()

2 个答案:

答案 0 :(得分:1)

你有一些错误的引号:

"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字符串传递给您的函数。

答案 1 :(得分:0)

除了@ 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匹配数据类型和字段数匹配