访问Low和High字段,并在表单中保持字段空白



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

我使用Like [Forms]![BackUpValidationForm1_3]!(AccountCMBO),"*"在我的表单上的所有字段,只是改变文本框区域为新的文本框。

但现在我的新问题是我需要保持这个功能,也允许一个范围。

我有一个访问链接,这是一个服务器表。表中有一列的数值较低,另一列的数值较高。例如,最低价可以是100,最高价可以是200。这意味着在这两个数字之间的任何帐户都可以通过该表的测试。如果我有一个账号为101的账户,我把它放到表单中,点击运行按钮,它会返回任何一个同时拥有101字段的行(低和高都是101,这意味着这是唯一一个适用于此规则的账户)和任何其他低为100高为200的行,因为它在这两者之间。我有几个这样的栏目,帐户低和高,功能低和高。

基本上只是使用我开始使用的标准(如[表单]![BackUpValidationForm1_3]!)(AccountCMBO),

我试过:在[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]之间,它自己工作。但是如果我在这个表单的另一个字段中也输入相同的内容并且将该字段留空然后在表单中搜索account它将不会返回任何结果。

我试过以下方法:

就像"" And Between [ACCOUNT_CD] And [ACCOUNT_CD_HIGH] &""并尝试在[ACCOUNT_CD]和[ACCOUNT_CD_HIGH]之间&"*"和其他字段相同的东西相互结合,两者都不会一起产生数据

也尝试:喜欢(形式)! (ValidationForm1_3) !(AccountCMBO),"" And Between [ACCOUNT_CD] And [ACCOUNT_CD_HIGH]在另一个表单字段中使用相同的内容:喜欢(形式)! (ValidationForm1_3) !(FunctionR3CMBO),之间的""和[OP_TYP]和[OP_TYP_HIGH]

还试着在它们之间用"或"代替"one_answers"

谁知道我怎么能解决这个问题?

My Actual Access 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] & "*"));

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

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

如果参数为空,则返回true(根据代码的编写方式,您可能需要执行@account_cd = '')。然后,如果参数不为空,则应该根据值检查要比较它们的任何列。因为你不知道是两个值都会被提供,还是只有一个值会被提供,between就不适合你了。

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

最新更新