定位与查找记录(50分)

  • 主题发起人 主题发起人 Dchou
  • 开始时间 开始时间
D

Dchou

Unregistered / Unconfirmed
GUEST, unregistred user!
我要查找一记录,查找内容与表中某一字段内容部分匹配,
但LOCATE、FINDNEAEREST似乎只能定位"前面部分"区配的记录,
非前部分的匹配的怎样定位?除LOCATE之外还有什么其他办法?


 
delphi5+ado+access
可以用filter加通配符来过滤出符合条件的记录
adotable1.Filtered:=false;
adotable1.Filter:='abcd like ''%cccc%''';
adotable1.Filtered:=true;
其它数据则修改相应的通配符
也可用SQL语句加通配符的方法来取得符合条件的记录
 
不知道各种数据库之间的区别,
只能给你提供一点建议:
select * from table where field like '%string%'
这样的SQL语句不能用吗?
 
with Query1 do
begin
Close;
SQL.Text := 'select name from country where name like ' + QuotedStr('%' + Edit1.Text + '%');
Open;
Table1.Locate('NAME', FieldByName('Name').AsString, []);
Close;
end;
 
如果已知要查找的内容,可以用copy(字段,i,length(查找的内容))与要查找字段进行比较
从而定位!
 
while not table1.eof
begin
table1.active:=true;
table1.edit;
s1:=table1.fieldbyname('name1').asstring;
table2.active:=true;
table2.first;
while not table2.eof
begin
s2:=table2.fieldbyname('name2').asstring;
if pos(s2,s1)>0 then
begin
ss:='y'
break;
else
ss:='n';
table2.next;
end;
table1.next;
end;
用以上pos(s2,s1)可以做到。但两个while do记录多时,执行太慢了,有点接受不了;
locate定位要快,我只能做到匹配到首字符相同的;
select * from table where name1 like '%String' 每次替换一条记录,就得sql.close,sql.open;
还有没更好的办法?!我只要按条件替换/标识某一字段就行了。
 
谁还能解答我的问题,我似乎明白了,但概念还是不很清晰,有人再给答案吗?
 
如果你要显示整个数据表内容
用FindKey,FindNearest,Locate前两项在ADO里面不能用
但是他们似乎都不能查询字段中间的部分
如果你只需要符合条件的数据显示,可以使用Filter和Query
这两项都符合你的要求
我认为用Query更好。
 
用Query。
Thanks.
 
后退
顶部