动态的生成SQL语句,我的想法是通过一个函数输入一个控制状态的参数,输出SQL语句,在函数里面用array把备用的SQL语句段放好然后根据不同的状态参数来自由的组合,这中间有一个小问题,就是LIKE的问题,like字符的时候要加‘’而‘’中间的是一个变化的值我想用DELPHI中的SQL参数:para来传递但是试了一下不行,:para好象必须要在同一对‘’里面才能认出来我这样的结构DELPHI不认 '....like '+''''+:para+'''';
不知道聪明的CSDN DELPHI块网友有什么好的办法?
不知道聪明的CSDN DELPHI块网友有什么好的办法?
'....like :para'
然后对para赋值
para := ''''+string+''''
这个想法可行吗?
sql.add('........like :aa');
parameters.parambyname('aa').value:=string+'%';
open;
应该是
sql.add('........like :aa');
parameters.parambyname('aa').value:=quoedstr(rstring+'%');//quoedstr转化字符串类型
open;
(@ $ @)
你说的方法我试了可以编译通过但是没有结果,但是我在数据库中直接用SQL查询是有结果的。不知道为什么?你试试看?
parameters.parambyname('aa').value:=string+'%';不能用 QuotedStr(string+'%')
那样比较容易出错。用楼上的方法比较好。
你的方法你在DELPHI下面写个简单的TEST看看,没有结果的,我试了不行的。
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Text:='SELECT * FROM Factory where factoryname like :aa';
Parameters.ParamByName('aa').Value:='f%';
open;
end;
end;没有任何问题,选出了以 f 开头的所有厂名。
真的很奇怪啊,在你写的TEST之前我就是这样写的啊,但是没有结果,表头SELECT出来了,但是没记录。这个我就不懂了但是我这样写
adoquery1.sql.add('select * from slider where sl_code like '+''''+'N%'+'''');
这样是可以的但
adoquery1.sql.add('select * from slider where sl_code like :para');
adoquery1.parameters.parameterbyname('para').value := 'N%';
却不行没有结果,我用的D6这个不会是个BUG吧?
ADOQuery1.Clear;
ADOQuery1.SQL.Add(' Select * From TableName Where FieldName Like :dd');
ADOQuery1.Parameters.ParamByName('dd').DataType :=ftString;
ADOQuery1.Parameters.ParamByName('dd').Size:=30;
ADOQuery1.Parameters.ParamByName('dd').Value:='%';
ADOQuery1.Open;
OK;
procedure TForm1.Button6Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Text:='SELECT * FROM Factory where factoryname like :aa';
Parameters.ParamByName('aa').Value:='f'+%;(此处是最为重要的就为+%)
open;
end;
end;