访问“低”和“高”字段并将字段保留为表单中的空白

时间:2014-07-02 17:09:18

标签: sql xcode forms ms-access

首先我有问题,如果我想在我的表单上保留一个字段并且只搜索另一个字段(例如,如果你有2个字段,但我只想搜索数据库中的一个,并保留另一个它会带回正确的结果。

我通过使用:像[Forms]![BackUpValidationForm1_3]![AccountCMBO]& " *" 在我的表单上的所有字段中,只是将文本框区域更改为新的文本框。这就像一个魅力。

但是现在我的新问题是我需要保留该功能并允许范围。

我有一个访问服务器表的访问链接。该表有一个数字较小的列,然后是一个具有较大数字的单独列。例如,low可能是100而high可能是200.这意味着任何介于这两个数字之间的帐户都会通过此表的测试。所以,如果我有一个帐号为101的帐户,我把它放在我的表单中,然后单击运行按钮,它应该带回两个字段为101的任何行(所以低和高都是101,这意味着这是只有这个规则适用的帐户)和任何其他行,其中低至100和高200,因为它介于两者之间。我有几个像这样的列,帐户低和高,功能低和高。

基本上只使用我开始使用的标准(如[Forms]![BackUpValidationForm1_3]![AccountCMBO]&" *")它不会捕获那些可能具有范围的记录在它下面然后在它上面意味着它在中间某处。

我尝试过:在[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]之间,它可以自行运行。但是如果我把同样的东西放在这个表格上的另一个字段中并且我将该字段留空并且我只是在表单中搜索帐户它将不会带来任何结果。

我尝试过以下方法:

喜欢" "在[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]&之间" "还尝试了[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]& " *"对于其他领域,相同的事物相互结合,不会同时产生数据

还试过:  喜欢[Forms]![ValidationForm1_3]![AccountCMBO]& " "在[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]之间  在另一个表单字段中使用相同的内容:  像[Forms]![ValidationForm1_3]![FunctionR3CMBO]& " "在[OP_TYP]和[OP_TYP_HIGH]之间

还尝试了一个"或"在他们之间而不是"和"

任何人都知道如何解决这个问题?

我的实际访问SQL:

SELECT VALIDATION_RULE3.ACCOUNT_CD, VALIDATION_RULE3.ACCOUNT_CD_HIGH,
Rule3_Accounts.Description, Rule3_Accounts.D0_DESCA, Rule3_Accounts.D0_TYPE, 
Rule3_Accounts.D0_PARENT, Rule3_Accounts.D0_WEIGHT, Rule3_Accounts.D0_LEVEL,
Rule3_Accounts.D0_CHILD, Rule3_Accounts.D0_PRIORITY, Rule3_Accounts.D0_STATUS,
Rule3_Accounts.D0_CHILDSORT, Rule3_Accounts.D0_CREATE, Rule3_Accounts.D0_MODIFY, 
Rule3_Accounts.D0_BALTYPE, Rule3_Accounts.AccountText, VALIDATION_RULE3.XPN_OP_TYP_CD

FROM Rule3_Accounts INNER JOIN O8_VALIDATION_RULE3 ON Rule3_Accounts.AccountText = O8_VALIDATION_RULE3.ACCOUNT_CD

WHERE ((([Forms]![ValidationForm1_3]![AccountCMBO]) Like [Forms]![ValidationForm1_3]![AccountCMBO] & "*" Or ([Forms]![ValidationForm1_3]![AccountCMBO]) Between [ACCOUNT_CD] And [ACCOUNT_CD_HIGH] & "*")
AND (([Forms]![ValidationForm1_3]![FunctionR3CMBO]) Like 
[Forms]![ValidationForm1_3]![FunctionR3CMBO] & "*" 
Or ([Forms]![ValidationForm1_3]![FunctionR3CMBO]) Between [XPN_OP_TYP_CD] And [XPN_OP_TYP_CD_HIGH] & "*"));

1 个答案:

答案 0 :(得分:0)

听起来我需要检查参数是否为空白。

Where (isnull(@account_cd) or field1 >= @account_cd)
and     (isnull(@account_cd_high) or field1 <= @account_cd_high)

如果参数保留为null,则返回true(根据代码的编写方式,可能需要执行@account_cd = '')。然后,如果参数不为null,则应根据值检查要比较它们的列。既然你不知道是否会提供这两个值,或者只是一个会出现,那么两者之间的关系就不合适了。

此外,sql短路,因此如果参数的值为null,则不会检查or的第二部分。这就是为什么在遇到这些类型的问题时首先进行空检查非常重要。