我已经在MS Access上建立了一个关键字搜索表单,该表单运行得很好,但是到目前为止仅使用LIKE,我就可以使其成为准确的关键字搜索没有问题。我真正想要做的是添加选项以切换为精确。
我们可能要显示仅是“诺丁汉”的结果,或者我们可能要显示包含“ nott”的结果。
(下面的两组代码针对不同的搜索功能,因此具有不同的名称)
这是我目前为LIKE搜索运行的VBA代码:
Private Sub btn_NameSearch_Click()
Dim SQL As String
SQL = "SELECT tbl_AllData.Customer_ID, tbl_Types.Types, tbl_Types.Type_ID, tbl_AllData.Name, tbl_AllData.[Town/City], tbl_AllData.Postcode, tbl_AllData.[Main Contact], tbl_AllData.Phone, tbl_AllData.Email, tbl_AllData.Website " _
& "FROM tbl_Types INNER JOIN tbl_AllData ON tbl_Types.Type_ID = tbl_AllData.Type_ID " _
& "WHERE [Name] LIKE '*" & Me.txt_NameSearch & "*'" _
& "ORDER BY tbl_Types.Types, tbl_Alldata.Name; "
Me.subAllDataList.Form.RecordSource = SQL
Me.subAllDataList.Form.Requery
End Sub
这是我尝试实现的VBA代码,仅返回#NAME?:
Private Sub btn_Town_CitySearch_Click()
Dim SQL As String
Dim SQLExact As String
Dim SQLLike As String
If chkbox_SearchExact = True Then
SQLExact = "SELECT tbl_AllData.Customer_ID, tbl_Types.Types, tbl_Types.Type_ID, tbl_AllData.Name, tbl_AllData.[Town/City], tbl_AllData.Postcode, tbl_AllData.[Main Contact], tbl_AllData.Phone, tbl_AllData.Email, tbl_AllData.Website " _
& "FROM tbl_Types INNER JOIN tbl_AllData ON tbl_Types.Type_ID = tbl_AllData.Type_ID " _
& "WHERE [Town/City] = '*" & Me.txt_Town_CitySearch & "*'" _
& "ORDER BY tbl_Types.Types, tbl_AllData.Name; "
SQLExact = SQL
Else
SQLLike = "SELECT tbl_AllData.Customer_ID, tbl_Types.Types, tbl_Types.Type_ID, tbl_AllData.Name, tbl_AllData.[Town/City], tbl_AllData.Postcode, tbl_AllData.[Main Contact], tbl_AllData.Phone, tbl_AllData.Email, tbl_AllData.Website " _
& "FROM tbl_Types INNER JOIN tbl_AllData ON tbl_Types.Type_ID = tbl_AllData.Type_ID " _
& "WHERE [Town/City] LIKE '*" & Me.txt_Town_CitySearch & "*'" _
& "ORDER BY tbl_Types.Types, tbl_AllData.Name; "
SQLLike = SQL
End If
Me.subAllDataList.Form.RecordSource = SQL
Me.subAllDataList.Form.Requery
End Sub
让我知道您还有什么需要看的。我觉得这是我在每个IF语句结果的末尾设置SQL字符串的方式。
我已经弄清楚了,不需要重置每个只需要设置SQL的String,结果如下所示:
Private Sub btn_Town_CitySearch_Click()
Dim SQL As String
If chkbox_SearchExact = True Then
SQL = "SELECT tbl_AllData.Customer_ID, tbl_Types.Types, tbl_Types.Type_ID, tbl_AllData.Name, tbl_AllData.[Town/City], tbl_AllData.Postcode, tbl_AllData.[Main Contact], tbl_AllData.Phone, tbl_AllData.Email, tbl_AllData.Website " _
& "FROM tbl_Types INNER JOIN tbl_AllData ON tbl_Types.Type_ID = tbl_AllData.Type_ID " _
& "WHERE [Town/City] = '" & Me.txt_Town_CitySearch & "'" _
& "ORDER BY tbl_Types.Types, tbl_AllData.Name; "
Else
SQL = "SELECT tbl_AllData.Customer_ID, tbl_Types.Types, tbl_Types.Type_ID, tbl_AllData.Name, tbl_AllData.[Town/City], tbl_AllData.Postcode, tbl_AllData.[Main Contact], tbl_AllData.Phone, tbl_AllData.Email, tbl_AllData.Website " _
& "FROM tbl_Types INNER JOIN tbl_AllData ON tbl_Types.Type_ID = tbl_AllData.Type_ID " _
& "WHERE [Town/City] LIKE '*" & Me.txt_Town_CitySearch & "*'" _
& "ORDER BY tbl_Types.Types, tbl_AllData.Name; "
End If
Me.subAllDataList.Form.RecordSource = SQL
Me.subAllDataList.Form.Requery
End Sub