如何在结果中查询(30分)

  • 主题发起人 主题发起人 茶叶蛋
  • 开始时间 开始时间

茶叶蛋

Unregistered / Unconfirmed
GUEST, unregistred user!
假设我有了一个Table或者Query,里面已经有了一次查询的数据,
那么我如何在这些结果中进行进一步的查询呢?

对不起,我的数据库很差... @_@
 
用 filter , filtered 属性能不能满足你的要求.
 
举例,同志.
对不起,我还很懒... *_^
 
>>我的数据库很差..我还很懒..

这样可不好. 要从实践中提高, 同志. 查查帮助, 多试几次.

 
我来吧, 大分咱挣不了, 这小分咱还行。
看着:

Query1.filter:='fieldname=''A''';
Query1.filtered:=true;
Query1.first;


列出所有FIELDNAME='A'的记录。

如果FILTER不够, 有个FilterRecord事件, 可以在里面
判断某记录是否附合条件。

procedure TForm1.Query1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if Query1.Fieldbyname('fieldname').asstring= 'A' then
Accept:=true
else
Accept:=false;
end;

 
看过了!
wuyi老兄, filter可能不行,
打个比方:我有一个复杂无比的SQL, 查询的数据库又奇大,以至我查过的东东就不想
再查一遍.然后, 我的用户要在已经找出来的纪录里再找合乎另外条件的纪录,条件当
然由他定,而且我还不知道他到底会不会再找,怎么办?

>大分咱挣不了, 这小分咱还行。
liwei老兄,如果我没有记错的话,您可是从我手里拿走过80分的耶!
您举的例子同样不合我的要求,因为在过滤时我照样要重新进行查询的!
ps: liwei是不是李维啊?
 
茶蛋:
方法1:内存表
方法2:临时表
 
filter的方法能用.真心地对大家说声对不起.
但是好像只支持二次查询,还有更好的方法吗?
 
对于TTable控件来说,可以采用如下方法:
IndexFieldName := '条件字段名称';
SetKey;
FieldByName ('条件字段名称').AsString := '条件值';
GotoKey并检查返回值;

对于TQuery控件来说,则
用locate方法.

 
其实最好还是用Query语句, 在第一次查询之前, 先记录
下查询条件, 如Select AA,BB from table1 where AA="C1"
将sql 语句拆分成两块, s1:='Select AA,BB from table1'
s2:='where AA="C1" ' 如果需要添加条件BB>0, 只要将
s3:=S2+' and '+'BB>0';
query1.sql.text:= S1+S3
query1.open;
即可得到结果.
还原时, 只要SQL.text:=S1+S2;然后再打开.
 
对啊,其实我一开始也象这样干,但是有人说我这样太没效率,
可以进行过的查询......
 
下面是我的一个笨拙的SQL:
select * from letters
where ( parent = 0 and ( subject like "*SearchString*" )
or ( content like "*SearchString*" ) )
'or ( id in ( select parent from letters
where parent <> 0 and content like "*SearchString'*" ) )
[可怜巴巴地说]我还有两个条件没加上去呢!
 
为什么不试试我的方法????

Locate方法:

Locate('Content;Subject', VarArrayOf(['SearchString', 'SearchString]), [loPartialKey]);

 
不是有控件可以在TQUERY,TTABLE中进行查询的吗
 
也有个笨办法
SELECT语句最后的WHERE保存。需要查询时把原来的WHERE后面加点东西:)
sherman:是好象有
 
茶兄啊, 才80而已。您就别老记着了。:)

LIWEI是立伟, 俺小名。

我觉得CJ的'笨方法',还是不错的。 如果你要多次查询的话。
一个一个加进去。 也只有这样了。 我想。
 
我也遇到这样的问题。比如,我使用两个QUERY进行查询。条件如下:
1、QUERY1进行科室表查询,在表中有STATE字段。我先查询STATE=1的记录,在
使用查询结果中的DEPT_CODE字段从QUERY2中查询此科室的所有人员名单,添
加到TSTRINGS定义的字符列表中,并进行相应的处理。
2、我先查询STATE=1的记录,再查询STATE=2的字段,重复上面的操作。

进行大型查询(象“茶叶蛋”老兄那样的查询,我有的是!)后将结果显示到
DBGRI1D中,在从此查询结果集中查询符合另一条件的数据显示到DBGRID2中。
如果使用FILTER,即使DBGRID中的数据不变,但不能动态刷新,且可能出现“重复
读”或“幻象读”的逻辑错误。所以不太好用。我一般使用本地数据库做被份
然后再处理。

还有什么更好的办法吗?!!!!
 
多人接受答案了。
 
后退
顶部