急救---如何在QUERY1查询的数据中再挑选数据!!!(200分)

  • 主题发起人 主题发起人 pearl
  • 开始时间 开始时间
P

pearl

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
本人在用DELPHI编写数据库程序时碰到一个问题,
当我用QUERY1查询数据后,想从检索出来的数据中再
挑出满足一定条件的数据,由于QUERY1我是采用动态
方式,所以ONFILTERRECORD事件不大适合.
由于我用QUERY1查询数据后要再检索数据时还要分好几种
情况,所以不能用一句SQL语句就完成,而且我做的数据库程序
是一CLENT/SERVER型数据库程序,考虑到效率问题时,不好从
数据库服务器中多次查询数据,最好从第一次查询数据下载来的数据
中来检索数据,即从QUERY1查询的数据中再分几种情况来检索数据。
请问各位大虾有何高见。
 
使用过滤(filter)

例:
Query1.filtered:=True;
Query1.filter:=' 分数>60 ';
 
你的方法没有问题,必须采用两次或多次取结果。
另外,你所说的 “ONFILTERRECORD事件不大适合”,可能不对,ONFILTERRECORD
也可以动态多项选择,比较灵活.
 
呵呵,可以用过滤嘛,不过已经说了,
记得有人提过一个类似的问题,可以搜索一下
你可以建立临时表以满足条件,
也可以保存上次的WHERE自己部分,再动态加入一些,组成新的WHERE子句

GOOD LUCK
 
请问如何用ONFILTERRECORD进行动态多项选择,能否详细一些。
此外,由于我在程序的多处地方用到QUERY1,我怕ONFILTERRECORD事件会
影响到其它地方。而且此处最好还是用QUERY1。
 
我是这样做的:
case int of
1: SQLString := 'select id from question where ab in ';
2: SQLString := 'select ed from question where ab in ';
3: SQLString := 'select as from question where ab in ';
end;

query1.sql.text := sqlstring + query1.sql.text;

这样显然要再查一遍,但是要满足灵活性就没办法了。
这个问题我在大富翁里头问过一次了,除了filter外没有好办法,我现在
还是用的上面的那个方法, wuwu......
 
既然使用 Sql Server 类的数据库为什么不用一个存储过程。在其中设置光标
的方法解决,如果数据量很大,推荐使用 Sql Server 7 中的 OLAP.
 
能不能把查询的结果临时写入本地表,然后对本地表进行查询?
 
(1)Sql Server 7 中的 OLAP 如何使用?
(2)如何查询的结果临时写入本地表,然后对本地表进行查询?
(3)听说有种方法是采用视图来解决,但我不知咋用?
 
把查询结果写入临时表, 再从该表查询, 从实现上来说比较简单, 如果实时性
或速度要求不高时可采用.
视图当然可以解决本问题. 把QUERY1查询改成创建视图, 进一步的查询就从该
视图中查询. 但不知速度怎样, 如果速度不好, 还不如直接从原数据表中查询.
 
即然是QUERY,就不会受到FILTER影响,如有,只须加入query1.filtered:=false
就屏蔽过滤了。多项ONFILTERRECORD可先设一全局变量filtercase:integer;
在onfilterrecord中
case filtercase of
1:
2:
...
end;

在调用时先给
query1.filtered:=false;
filtercase:=相应应值;
query1.filtered:=true;
不过建立临时表主意也不错,用insert into .. select * from ... where...
 
我的意思是 SELECT 了 再 FILTER
临时表如果不大,可以采用内存表提高效率,RXLIB中有内存表的构件。
 
可以先写一关于本查询的View,再针对该View进行Query操作,即可实现.
 
query active=true,后再LOCATE,
or 遍历.
 
还是建立临时表吧.
但是建立临时表可能会占用较多的事件,
不知在建立临时表上怎样才能更加省时?
 
原来你使用得是SQL Database,那我说的过滤到可能效率低了,
你应使用视图了,多写几个视图吧,由于SQL Database会自动为
你的视图编译,优化查询,所以效率很高的.
例子:
Create View Viewdb
AS
Select city,state,altitude
from cities
where altitude>2500
对此视图(数据来源于一个源表)你可当作普通表处理,
插入,删除记录,原表自动更改.

 
多人接受答案了。
 
后退
顶部