【发布时间】:2020-07-22 12:33:36
【问题描述】:
我已将我的 Access 数据表传输到 SQL 服务器,同时仍想将 Access 用于前端。这一切都运作良好,但此后使查询运行速度变慢。运行最慢的是用于搜索记录的查询。
因此,我正在将查询转换为 SQL 存储过程,并且它几乎可以正常工作,这得益于我在这里获得的帮助。搜索表单目前有 2 个搜索字段(名字和姓氏),但一旦我能解决问题,这将扩展到更多搜索字段。
我面临的问题是处理搜索字段中的空值。例如,如果用户在 firstname 字段和 surname 字段中输入文本字符串,则查询将返回正确的结果。但是,如果任一搜索字段留空。查询不起作用,您会收到错误调试消息。
SQL 存储过程:
改变程序 [dbo].[ZSearch]
@FirstName varchar(100),@Surname varchar(100)
开始
SELECT [First name], [Surname] FROM [Names] Where ([First Name] LIKE '%' + @FirstName + '%') 和 ([Surname] LIKE '%' + @Surname + '%')
结束
然后在 Access 中,我有一个直通查询:
执行 ZSearch
最后,在我的表单上,我有一个按钮,点击时会运行以下 VB:
Private Sub Command4_Click() Dim rst As DAO.Recordset
Dim Firstname As String Dim Surname As String Firstname = [Forms]![Search]![SearchFirstName] Surname = [Forms]![Search]![SearchSurname] With CurrentDb.QueryDefs("qryPassR") .SQL = "EXEC ZSearch " & Firstname & ", " & Surname 'Debug.Print .SQL Set rst = .OpenRecordset() DoCmd.OpenQuery "qryPassR" End With End Sub
请有人帮助我处理搜索字段中的空值。我认为需要说明的是,如果搜索字段为空,则将其视为通配符,如果不为空,则使用其中的内容。
非常感谢
【问题讨论】:
标签: sql-server ms-access null