这个问题牵涉到两个重要的概念:
1、条件表达式本身的合法性问题:
Fileter中所使用的,并不是Access本身的任何合法表达式,在Access文档中我们可以看到:
Filter 属性是一个[url=mkMSITStore:\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproFilter.htm#]字符串表达式[/url],它包含了一个不带 WHERE 关键字的 [url=mkMSITStore:\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproFilter.htm#]WHERE 子句[/url]。
这个字符串表达式是由SQL引擎来进行解释的。
而条件表达式与SQL完全无关,完全由Access来解读,必须要符合Access的语法。
在条件表达式中,这样是合法的:[省份] In ('江苏','浙江')
但是这里'江苏'和'浙江'是两个参数,而非一个带逗号的参数。
2、Criteria的监视机制。
Access中大量对于Criteria变化的响应,都是通过一套监视机制来实现的(详情可参考我专栏中的文章《Access中神秘的Criteria》),但是这个响应机制就我目前理解而言,是只能监视本窗体的,对于其他窗体无法进行主动式的响应。因此在主窗体的数据变更,不会引起子窗体中Criteria的重新计算。如果一定要这样做,必须绑定到本窗体一个不可见的控件,然后当主窗体发生变更时,主动对子窗体的数据进行刷新,而同一窗体内的Criteria,则受到Access监控机制的监控。
[此贴子已经被作者于2006-6-10 9:48:59编辑过]
|