一个N年也没有解决的老问题: 在ADOQuery里如何用计算字段做Filter? ( 积分: 100 )

  • 主题发起人 主题发起人 jxj0561
  • 开始时间 开始时间
J

jxj0561

Unregistered / Unconfirmed
GUEST, unregistred user!
大家知道,在ADOQuery的onCalcfield(计算过程里)中:&nbsp;adoquery1.fieldbyname(计算字段名).asinteger&nbsp;的值永远都是-1,adoquery1.recno也永远都是-1.只有当filter为假时才会返回正确的值<br>请问如何能得到计算字段的正确值?&nbsp;或者如何实现通过计算字段来过滤adoquery的记录呢?
 
山不转水转,换个思路。<br>比如A是计算字段,A=B*C,现在要把A&gt;100的记录过滤出来,则可以这样处理Filter='A*b&gt;100'
 
问题是计算字段的内容是不能通过其他字段得到的,里面保存着当前数据集的recno(记录的行号),这样怎么来解决呢?
 
如果要得到正确计算字段的值可以这样试试:<br>var<br>&nbsp;oldFilterd:boolean;<br>begin&nbsp;<br>try<br>adoquery1.DisableControls;<br>oldFilterd:=adoquery1.Filtered;<br>adoquery1.Filtered:=false;<br>&nbsp;取值<br>finally<br>&nbsp;adoquery1.enableControls;<br>&nbsp;adoquery1.Filtered:=oldFilterd;<br>end;<br>end;<br><br>当然可以用bookmark更加恢复到原记录
 
没有办法,如果Filter为假的话,计算事件就不会触发了,也就是说没有计算的机会,如果强行用手工循环方式来计算的话又会失去作用计算字段的本意.&nbsp;这个问题的确不好解决
 
1。可以考虑在数据库中计算,如果能计算的话。也可以考虑使用存储过程<br>2。先计算,然后把结果导入另一个数据集,再过滤
 
帮你顶,接个分
 
如题:&nbsp;一个N年也没有解决的老问题:&nbsp;在ADOQuery里如何用计算字段做Filter?<br>如果用数据库计算的话,就没有必要提这个问题了,请大家讨论一下有解决的方案么?
 
来自:weichao9999,&nbsp;时间:2007-8-13&nbsp;9:50:47,&nbsp;ID:3822207<br>1。可以考虑在数据库中计算,如果能计算的话。也可以考虑使用存储过程<br>2。先计算,然后把结果导入另一个数据集,再过滤&nbsp;<br><br>同意楼上的。
 
如果数据量很大,这个方法其不是很不实用!
 
我个人感觉,先将数据在sql服务器上处理完之后,再传到客户端比较好。&nbsp;<br><br>不过,具体情况还要具体分析。
 
看来没有几个人会了,可能这个问题真的无解
 
别急.会有人会的.
 
谢谢楼上的兄弟
 
复杂的过滤请在OnFilterRecord中写代码
 
OnFilterRecord中的代码对计算字段无效,这个已经试过N次了
 
我也遇到同样的问题
 
有高手能解决这个问题吗?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部