模糊查询(100分)

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

dyyong

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做模糊查询时遇到这样一个问题,请大侠指教。
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('Select * FROM 用户表 WHERE (((用户表.帐号) LIKE ("%"+edit1.text+"%")))';
try
query1.Prepare;
query1.Open;
except
query1.ExecSQL;
end;
老是有问题,通不过。提示:odbc accsess参数不足。期待是2。
 
query1.sql.add('select * from table where table.field1 like "%'+edit1.text+'%"')
 
这句错了!
query1.SQL.Add('Select * FROM 用户表 WHERE (((用户表.帐号) LIKE ("%"+edit1.text+"%")))';
改成:
query1.SQL.Add('Select * FROM [用户表] WHERE [用户表].[帐号] LIKE "%'+edit1.text+'%"');
 
使用 Dataset 的 OnFilterRecord 事件.

procedure TForm1.Query1FilterRecord(DataSet: TDataSet;var Accept: Boolean);
begin
Accept := pos('子字符串',Dataset.FieldByName('字段名').asstring)>0;
end;
select 字段名 from 库名 where content like '*子字符串*'

用SQL这样做:
Query1.SQL.Add( 'select * from table where fields like *子字符串*' );
Query1.Open;

在SQL Explore里
用过‘*子字符串*’,看见过‘%子字符串%’,好像是随系统而定。
实在不行可以在SQL Builder里头构造
 
樓上的兄弟都幫你解決了語法問題,
我還是勸你不要這樣寫,因為這樣的
語句實在是效率太差了,
小心寫完後被人扁
 
blue girl:
你有什么好的方法,请指教。
 
各位大侠还是不行。参数不足,期待是1。
 
query1.sql.add('select * from table1 where charindex(字段 ,"'+edit1.text+'")>0')
query1.open;
这个方法比较快!
 
如果用杜宝的应该没有问题呀!
 
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('Select * FROM 用户表 WHERE 用户表.帐号 LIKE %' +#39+edit1.text+#39+'%');
try
query1.Prepare;
query1.Open;
except
query1.close;
end;
 
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('Select * FROM 用户表 WHERE 用户表.帐号 LIKE ''%' +edit1.text+'%''');
try
query1.Prepare;
query1.Open;
except
query1.close;
end;
 
这样写这部分吧一定行。
LIKE ''%'+edit1.text+'%''');
 
这个问题的关键是,%是代表一个或多个字符,所以你在LIKE条件开始就使用了%,那么后面的edit1.text+'%'是不起作用的.也就是说你写出的SQL等同于不加任何条件的查询.
 
:landelphi:
这个语句的条件是 ,这个字段值一定要包含edit.text!
 
把这一句:

query1.SQL.Add('Select * FROM 用户表 WHERE (((用户表.帐号) LIKE ("%"+edit1.text+"%")))';
改为:
query1.SQL.Add('Select * FROM 用户表 WHERE (((用户表.帐号) LIKE :cs))');
query1.parameters.parambyname('cs').value:='%'+edit1.text+'%'
肯定OK
 
creazyboy,你出的主意你自己试验过吗? 你的方法是不能达到预期目的的.
%后面的任何条件都会被忽略的.
 
不是吧,你说的是哪个%!
这个句子的作用是查出所有帐号含有字符串edit1.text的行,
这样做行的,我用过!
 
query1.SQL.Add('Select * FROM table1 WHERE table1.field1 LIKE'+#39+'%'+trim(edit1.text)+'%'+#39);
這樣做編譯應該不會出錯,我都是這樣子做的!
 
我在ORACLE里用过,%分号不会被略过我试过多次了。一定得。
 
to landelphi: creazyboy的说法没错的,我这样用都用了两年了,这样解做“包含”

dyyong:你发完帖我就回答了你的问题,杜宝几乎同时和我发出帖子,问题就这么简单,
如果不行的话,你检查一下其他地方
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部