我有一个搜索页面,根据提名的标准返回结果,当每个条件为OR时,这可以正常工作,但是当我使用AND时,它返回错误或没有结果。例如,搜索条件可能是......
A. Author = ""
B. Subject = ""
C. Keyword = ""
D. Dated = ""
代码:
SELECT *
FROM Table
WHERE Author = '" & strAuthor & "'
AND Subject = '" & strSubject & "'
AND Keyword = '" & strKeyword & "'
AND Dated = '" & strDated & "' "
这里我只使用了4个参数,而实际上还有不少参数。但是这个例子应该解释这个问题...为了完成这项工作,我需要更加具体,例如“如果A和B”或“B,C和D”,但使用任何空白或NULL的参数将不起作用。
现在我可以使用像......这样的条件语句写入标准。
SELECT *
FROM Table
WHERE
if strAuthor <> "" then
Author = '" & strAuthor & "'
end if
if strSubject <> "" then
AND Subject = '" & strSubject & "'
end if
等等,除了写这样的SELECT
字符串不起作用外,只会产生错误,因为select字符串不能包含其他代码(这是我的发现)。
如果选项只有几个,我可以为每个组合编写单独的选择字符串,但有超过10个不同的标准需要超过3,628,800个组合!
有解决方法吗?
答案 0 :(得分:0)
这里有2个选项:
a)创建一个存储过程并为所有列提供一些默认值,如果用户没有传递任何值,查询将使用该列的默认值运行。
b)在前端施加规则,以便始终为所有列选择一个值。
答案 1 :(得分:0)
使用此代码时不需要存储过程:
SQL = "SELECT * FROM Table WHERE ID <> ''"
if len(strAuthor) > 3 then
SQL = SQL & " AND Author = '" & strAuthor & "'"
end if
if len(strSubject) > 3 then
SQL = SQL & " AND Subject LIKE '%" + Replace(strSubject, "'", "''") + "%'"
end if
if len(strKeyword) > 3 then
SQL = SQL & " AND Description LIKE '%" + Replace(strKeyword, "'", "''") + "%'"
end if
if strCatID <> "" then
SQL = SQL & " AND Category = '" & strCatID & "'"
end if
SQL = SQL & " Order By Subject ASC "
请求ID的第一行的重要性是作为通用占位符,以便所有后续参数都可以以“AND”作为前缀。
如果变量为空,则不包含该变量,因此仅使用指定的变量。