我创建了一个程序,它显示来自访问数据库中不同表的数据(不使用向导连接到数据库。即所有连接都已经硬编码),我创建了一个搜索一个字段的简单搜索在一张桌子里。但是我想创建一个允许我搜索表中所有字段的函数。下面是我创建的简单搜索功能。
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()
答案 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_1
和field_100
匹配数据类型和字段数匹配