我希望将用户输入提示的单独查询组合到一个查询中。
Q1提示用户输入9位数的ITEM(PN):
SELECT
STUFF,
MORE_STUFF
FROM dbo_X
WHERE (RIGHT(dbo_X.ITEM, 9)=[PN:])
ORDER BY dbo_X.COMPONENT
Q2提示用户输入ItemDesc的一些部分(描述):
SELECT
STUFF,
MORE_STUFF
FROM dbo_X
WHERE dbo_x.ItemDesc LIKE '*'&[Description:]&'*'
ORDER BY dbo_X.COMPONENT
我的想法是使用IIf根据用户输入执行单个WHERE语句:
SELECT
STUFF,
MORE_STUFF
FROM dbo_X
IIf ([Description{D}PartNumber{P}:]='D',
WHERE dbo_X.ItemDesc LIKE '*'&[Desc:]&'*',
WHERE (RIGHT(dbo_X.ITEM, 9)=[PN:]))
ORDER BY dbo_X.COMPONENT
目前无法使用,也不确定我是否有语法问题,或者我是否尝试使用IIf /不正确。
答案 0 :(得分:1)
考虑调整工作流程并使用专用用户界面,例如MS Access表单,而不是依赖于查询参数弹出窗口,这些弹出窗口在最佳设计中不是接收命名参数值的标准方式。
为描述(D),PartNumber(P), Desc:和 PIN:可以通过第一个框有条件地链接(锁定/不可见)的字符长度验证的值。
保存指向表单控件的两个查询:
SELECT
STUFF,
MORE_STUFF
FROM dbo_X
WHERE (RIGHT(dbo_X.ITEM, 9)=Forms!myform![PN:])
ORDER BY dbo_X.COMPONENT
SELECT
STUFF,
MORE_STUFF
FROM dbo_X
WHERE dbo_x.ItemDesc LIKE '*'& Forms!myform![Description:] &'*'
ORDER BY dbo_X.COMPONENT
在同一个新表单上,放置一个命令按钮来输出查询,并通过VBA或宏使该按钮调用相应的查询,具体取决于 Description(D),PartNumber(P)。使用这种方法,不会出现弹出窗口,因为所有参数都在表单上得到满足。
If Forms!myform![Description(D), PartNumber(P)] = 'D' Then
DoCmd.OpenQuery "DescriptionQuery"
Else
DoCmd.OpenQuery "PinQuery"
End If
答案 1 :(得分:0)
iif()
是一个表达式,而不是一个子句。所以,你不能那样使用它。
另一方面,你可以这样做:
SELECT STUFF, MORE_STUFF
FROM dbo_X
WHERE ([Description{D}PartNumber{P}:] = 'D' AND dbo_X.ItemDesc LIKE '*'&[Desc:]&'*') OR
([Description{D}PartNumber{P}:] <> 'D' AND RIGHT(dbo_X.ITEM, 9) = [PN:]))
ORDER BY dbo_X.COMPONENT;
哦,这甚至不需要iif()
。
顺便说一下,如果[Description{D}PartNumber{P}:]
可以有NULL
值(只需使用nz()
函数),表达式会更复杂。