如何在 TQuery 或 TADOQuery 中,查找 (Field1 > Expession1) and (Field2 < Expession2

  • 主题发起人 主题发起人 Lee.JH
  • 开始时间 开始时间
L

Lee.JH

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在 TQuery 或 TADOQuery 中,查找 (Field1 > Expession1) and (Field2 < Expession2)(100分)<br />在 TQuery 或 TADOQuery 中,
如何查找 (Field1 > Expession1) and (Field2 < Expession2),
并同时将纪录指针定位在此,
因有一定数据量,此操作对速度有较高要求。
 
with TADOQuery1 do
begin
sql.clear;
sql.add('select field1,field2 from TableName Where(Field1>expession1 and Field2<Expression2)');
open;
while not eof do
begin
//expression1
next;
end;
close;
end;
 
TQuery 或 TADOQuery 已查询到纪录,目的是想根据条件定位。
 
Locate 等好象不能这么指定(> <)
 
其他方法呢?
 
可以先用这个方法找到符合条件的记录
with TADOQuery1 do
begin
sql.clear;
sql.add('select field1,field2 from TableName Where(Field1>expession1 and Field2<Expression2)');
open;
while not eof do
begin
//expression1
next;
end;
close;
end;
因为符合条件的记录可能很多 所以把指针定位到第一条记录不就可以了吗??
 
用过滤吧,Filter:='Field1>expession1 and Field2<Expression2'
Filtered:=true
记录指针定位于符合条件的第一条记录,
要移动其他符合条件的记录用next,其它的一样
 
要第一个查询的基础上再用一个查询?
 
我觉得给字段加索引就行了,不然真的没有更好的办法,另外大家讨论一下,SQL语句
的编译顺序是否对查询有影响
假设 FieldA字段记录值 1-10000 共10000条
FieldB字段记录值 1-10000 共10000条
现在 Select * from table where FieldA>1 and FieldB<2
在SQL的搜索中,
如果SQL
先从10000条记录中搜索FieldA>1会得到9999条记录
再搜索fieldB<2是从9999条记录开始搜索

还是SQL
先从10000条记录中搜索FieldB>2会得到2条记录
再搜索fieldB>1是从2条记录开始搜索

这两种搜索顺序的效率明显是不同的,不知道哪位老兄有这方面的经验,一起讨论
 
locate能否实现呢?
 
locate能否实现呢?
------------------
好象locate 是匹配定位,没有<, > 等表达式的。
并且个人感觉非常慢。

建议用SQL语句或 INFORPOWER
 
看来是不好解决了,是不是该收贴了呢?
还是继续吧,请各位DWF们帮忙UP一下。
 
同意 txdelphi,
用过滤。
 
使用Filter屬性
或寫一個循環
while not query1.eof do
begin
if query1.fieldbyname('field').asinteger>value then
exit;
query1.next;
end;
 
要麼重寫SQL語句重新檢索,要麼使用過濾條件
 
with TADOQuery1 do
begin
close
sql.clear;
sql.add('select field1,field2 from TableName Where(Field1>''expession1'' and Field2<''Expression2)''');
prepared;
open;
while not eof do
begin
//expression1
next;
end;
close;
end;
以上方法能达到你的要求,
写SQL语句时自已的表达式要用两个单引号.
 
filter及sql都不是我想要的答案。
感谢各位DWF的支持,准备接分!
 
多人接受答案了。
 
后退
顶部