关于查询问题(急!!!)(100分)

  • 主题发起人 主题发起人 enter_von
  • 开始时间 开始时间
E

enter_von

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何实现对DbGrid的数据的模糊查询啊,
如:某一column的数据为
abc
acd
bcd
bgg
输入'a'则指到abc Row;输入'b'则指到bcd Row;输入'ac',则指到'acd'.....
急啊!!!
 
Locate(<Key>, <KeyValue>, [loPartialKey]);
 
来源于葵花保典
Delphi作为一个强大的数据库应用开发工具的一个重要标志,就是支持SQL编程。在实际的过程中,经常需要对某些字段进行模糊查询。如对“姓名”字段进行查询,当输入“王”时,能自动地将王姓的所有记录列出来。其实,通过结合SQL和Delphi的特点,就能很容易地完成这个功能。其基本原理是:查询时,将查询的范围控制在姓名大于‘查询字符串+chr(0)’与小于‘查询字符串+chr($ff)’之间,就能将满足条件的所有记录查询出来了。下面是具体的例子:
Var
NameStr:String;∥设置字符串中间变量
Begin
NameStr:=′王′;

Query1?SQL?Clear{清除SQL属性中的SQL命令语句}
Query1?SQL?Add(′Select*FromCustom?dbwhere(Name1&amp;gt;=N1)and(Name2&amp;lt;=N2)′);∥SQL命令语句
Query1?params[0]?AsString:=NameStr+chr(0);∥控制参数在NameStr+Chr(0)
Query1?params[1]?AsString:=NameStr+chr($ff);∥和NameStr+Chr($ff)之间
Query1?Open;∥打开数据库,执行SQL查询
End
(陕西 杨波)
 
好像不行哦,
必须全部输入才可以啊[:(]
 
function TAddressList.SkipCursor(AQueryParam: string): boolean;
var
BookMark: TBookmarkStr;
begin
with MailDataModule do
if quryMailAddress.Active then
begin
BookMark := quryMailAddress.Bookmark;
quryMailAddress.First;
result := false;
quryMailAddress.DisableControls;
while not quryMailAddress.Eof do
if uppercase(AQueryParam) < uppercase(quryMailAddress.FieldByName('Display').AsString) then
if uppercase(AQueryParam) = uppercase(copy(quryMailAddress.FieldByName('Display').AsString, 1, length(AQueryParam))) then
begin
result := true;
break;
end
else
quryMailAddress.Next
else
break;
if not result then
quryMailAddress.Bookmark := BookMark;
BookMark := '';
quryMailAddress.EnableControls;
end
else
result := false;
end;
 
select * from table where cola like 'aa'* //或?号
 
在一些数据库中还可以用Select * From 表名 Where (列名=''''+Edit1.Text+''''+'%')来
实现这类查询。
 
使用DataSet的Locate功能,例如:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Table1.Locate('这里填写你要搜索的字段名',Edit1.text,[loPartialKey]);
end;
 
用Locate,它支持模糊查找功能,
具体用法见Delphi的帮助
我想肯定能满足你的要求的
 
var s,ss:string;
begin
s:='ab';
table1.open;
while not table1.eof do
begin
ss:=table1.fields[0].asstring;
if s=copy(ss,1,length(s)) then break
table1.next;
end;
end;
 
总的说来至少有四种方法:
1.用SQL+参数
2.用Locate
3.逐行查找
4.用第三方控件
 
比如查输入a
对应的query应该是
.............
query1.sql.clear;
query1.sql.add('select * from database where colum like ' +'''a%''');
query1.open;
.................
databasename 和 colum 是数据库名和字段名
 
多人接受答案了。
 
后退
顶部