使用文本框作为字符串OR int的条件进行Access Query

时间:2016-10-07 15:13:04

标签: sql ms-access criteria

我处理的问题似乎无法解决。我有一个Access查询,我根据单个文本框值的条件检查多个列。前3列的一切都很好用。他们是所有的字符串。

SELECT Req.Ctrl, Vend.VendNick, Req.CSCReq, Req.PO, Req.Status, Line.Quote
FROM Line INNER JOIN (Vend INNER JOIN Req ON Vend.[VendID] = Req.[Vend]) 
ON Line.Ctrl = Req.Ctrl
WHERE (((Req.CSCReq)=[Forms]![Index]![Box2])) OR 
(((Req.PO)=[Forms]![Index]![Box2])) OR 
(((Line.Quote)=[Forms]![Index]![Box2]));

当我添加第4列时,我收到错误"表达式输入错误,或者它太复杂了......"

SELECT Req.Ctrl, Vend.VendNick, Req.CSCReq, Req.PO, Req.Status, Line.Quote
FROM Line INNER JOIN (Vend INNER JOIN Req ON Vend.[VendID] = Req.[Vend]) 
ON Line.Ctrl = Req.Ctrl
WHERE (((Req.CSCReq)=[Forms]![Index]![Box2])) OR 
(((Req.PO)=[Forms]![Index]![Box2])) OR 
(((Line.Quote)=[Forms]![Index]![Box2])) OR
(((Req.Ctrl)=[Forms]![Index]![Box2]));

我假设这是因为第4列是int,并且访问没有为此特定列正确定义文本框值的参数。有没有什么办法可以在查询的列级别或sql中解决这个问题,以便前3个仍然将值视为字符串,但是第4个将值视为int?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

而是将您的列转换为字符串,以便将表中的每一行与文本框值进行比较,使用CInt执行相反的操作。它会更有效率:

(((Req.Ctrl)=CInt([Forms]![Index]![Box2])));

答案 1 :(得分:0)

我将你的两个答案和一个小谷歌结合起来,帮助我到达我想去的地方。非常感谢您的快速反应。 Ted的回答使第4列发挥作用,但其他3列开始失败并出现同样的错误。 JohnHC的做法也是如此。以下是最终奏效的内容。

SELECT Req.Ctrl, Vend.VendNick, Req.CSCReq, Req.PO, Req.Status, Line.Quote
FROM Line INNER JOIN (Vend INNER JOIN Req ON Vend.[VendID] = Req.[Vend]) 
ON Line.Ctrl = Req.Ctrl
WHERE (((Line.Quote)=[Forms]![Index]![Box2])) OR 
(((Req.PO)=[Forms]![Index]![Box2])) OR 
(((Req.CSCReq)=[Forms]![Index]![Box2])) OR 
(((CVar([Req].[Ctrl]))=[Forms]![Index]![Box2]));

出于某种原因,CVar让一切都开始点击......不知道为什么,但它确实有效。

答案 2 :(得分:-1)

使用STR()函数:

str(Req.Ctrl)=[Forms]![Index]![Box2]

顺便说一句,我讨厌MS Access及其过度使用括号......