在delphi5中用locate函数时,似乎只能查出符合条件的第一条纪录,如果在数据库中有许多符合条件的纪录,不知该如何继续查询?(50分)

  • 主题发起人 主题发起人 leonada
  • 开始时间 开始时间
L

leonada

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi5中用locate函数时,似乎只能查出符合条件的第一条纪录,如果在数据库中有许多符合条件的纪录,不知该如何继续查询?
比如我想查询所有类别为'设备'的纪录,并将总数加在一起,不知该如何处理?
 
“查询所有类别为'设备'的纪录,并将总数加在一起”

您非得用locate吗?用Query写个统计的SQL得啦!

有什么别的办法告诉我一声啊!

 
同意无情,又快又容易
 
如果非要用locate,可以
通过query 的recordcount做个循环,
if locate(...)=true then i:=i+1;
i 为总数
 
用FILTER吧,FILTER中设定要查找的记录,比如NAME='abc',并把FILTERED设
为FALSE后,用FINDFIRST,FINDNEXT就行了,但速度不如LOCATE,因为LOCATE
会自动使用索引(如果有),不过对于本地型数据库程序速度也够了
 
我编过一个locatenext()函数,需要的话我可以帮找一找。
 
locate 定位时常用,看问题内容Query就能搞定。
 
用SQL似乎只能把sum的值存入一个字段中,不知该如何存入一个real变量中?
另外,俊妮,locatenext()函数我很需要,请给我发一份.
 
别的方法:

1、在Query中用SQL查询

2、在Table时用“过滤”技术。

procedure TfrmIn.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=(Table2.FieldByName('姓名').AsString=SName);

end;


用locate其实就是遍历一次,找到停止。不好。


 
如何:
Usbm:='你的设备名';
with query1 do
begin
sql.clear;
sql.add('select * from Utable where sbm=:sbm');
paramsbyname('sbm').asstring:=Usbm;
open;
end;
if query1.recordcount>0 then
begin
Urecordcount:=query1.recordcount;
query1.first;
Utable.locate('sbm',query1['sbm'],[]);
end;

若查询不为空则可定位到任意一条记录。
 
filter语句该如何书写,按下面的写法不对,应该用哪种写法?
table1.filter:='类别='通用设备'';
 
呵呵,应该是:
table1.filter:='类别='''通用设备'''
Pascal 中 ' 是有特殊含义的!
 
遇到过非要逐条查看所有类别为'设备'的纪录。
用TQuery将 '设备'表中符合查询条件的“唯一”字段SQL出来,
然后在'设备'表Locate“唯一”字段。
 
多人接受答案了。
 
后退
顶部