一个很令人沮丧的问题:ADOQuery的Filter不支持计算字段,各位大侠有什么解决办法?
我在ADOQuery中添加了一个计算字段,字段名为:货物简码,
然后在 计算事件里加入如下代码:
ADOQuery1.FieldByName('货物简码').AsString:=
GetHeadPyOfHz(ADOQuery1.FieldByName('货物名称').AsString);
// GetHeadPyOfHz 的功能是得到指定汉字的拼音首字母。
然后我再在其他地方设置过滤条件,如下:
ADOQuery1.Filter:='货物简码 like ''%'+Edit1.Text+'%''';
ADOQuery1.Filtered:=True;
结果却发生错误:项目在所需的名称或序数的集合中未被发现!
我在查看资料时看到 TDataSet 有一个保护属性:InternalCalcFields 而且是只读的。
它表示内部计算的字段是否包含在数据集中。
我想,既然有这么个属性,那么是不是我添加的计算字段没有包含在数据集中,
从而才发生这样的错误呢?
那么问题又来了,如何才能访问到这个既是保护又是只读的属性呢?
总之我的目的是用我创建的计算字段进行过滤操作,只要解决这个问题就万事OK!
当然这个问题不能用SQL的方法来解决,因为这样的话,ADOQuery1要频繁的打开关闭,
速度很慢,就不能在Edit1的OnChange事件中适时的过滤。