query的动态sql如何赋值?
SQL语句是字符串,可以用字符串的方法。
如:要从表TempTable中查寻Name字段为Edit1中输入的值的所有记录,可用:
StrSQL:='select * from TempTable while '+Edit1.Text;
Query1.SQL:=StrSQL;
Query1.ExecSQL;
但是,delphi对‘ “单引号、双引号不能区分,如果sql的where条件变量是string型的,形成的sql语句不完整,不知如何解决,例如:
ls_date:='2002/04/26'
ls_sql:='select flight_no from view_led where usedate='+ls_date;
则返回的ls_sql值为:
'select flight_no from view_led where usedate=2002/04/26
末尾少一个单引号?
请帮忙!!!
感激,激,激...
问题点数:20、回复次数:11Top
1 楼wzrlover(无语无声无欲无泪吾独行!)回复于 2002-04-28 18:52:47 得分 0
ls_sql:='select flight_no from view_led where usedate=:Is_date'
query1.parambyname('Is_date').asstring:=edit1.text;Top
2 楼yjs_lh(长风浪子)回复于 2002-04-28 19:04:35 得分 13
修改成这样:
StrSQL:='select * from TempTable where name = '''+Edit1.Text+'''';
Query1.SQL.Text:=StrSQL;
Query1.Open;
Delphi中,用两个单引号表示一个引号字符(称为转义符)。Top
3 楼blackfish(一天到晚游泳的鱼)回复于 2002-04-28 19:06:57 得分 0
query1.Active := false;
query1.SQL.Clear ;
StrSQL:= 'Select * from book.db where usedate=:Is_date'
query1.sql.add(StrSQL);
query1.paramByName('Is_date').asstring:=edit1.text;
query1.Active := True;
Top
4 楼gs571(*人称二炮*)回复于 2002-04-28 19:17:57 得分 5
with query do
begin
close;
sql.clear;
sql.add:='select * from book.db where'
+' userdate='+#39+edit.text+#39;
open;
end;Top
5 楼zhu_jy(coldfish)回复于 2002-04-28 19:25:57 得分 0
'select * from tmp where name = '+''+Edit1.Text+''Top
6 楼luoshumeng(乡村意外)回复于 2002-04-28 19:29:37 得分 2
上面的老兄说得都很好,不过我觉得用=:(我称之为替换)比较好,替换参数不用定义,这样做起来不就很方便吗?
ls_sql:='select flight_no from view_led where usedate=:tmp1'
query1.parambyname('tmp1').asstring:=edit1.text;Top
7 楼star_of_light(Supper Star)回复于 2002-04-28 19:54:32 得分 0
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add(strSQL);//strSQL为SQL语句
Open;
end;
如果你在SQL语句中使用了参数,别忘了给参数赋值。假设有一个参数为UserName.可以这样给它赋值:
Query1.ParamByName('UserName').AsString:=StrValue;//StrValue为字符串Top
8 楼lvloj()回复于 2002-04-28 20:00:43 得分 0
ls_sql:='select flight_no from view_led where usedate='+QuotedStr(ls_date);Top
9 楼firetoucher(风焱)回复于 2002-04-28 20:10:13 得分 0
query.sql.add(sqlstring);
query.open
or
query.executeTop
10 楼pusy(pusy)回复于 2002-04-28 20:59:13 得分 0
with adoquery1 do begin
close;
sql.clear;
sql.add('select * from score where');
sql.Add(string1+string2+':xue');
if (string1='学号') or (string1='成绩') then begin
Parameters.ParamByName('xue').value:=strtofloat(edit1.Text)
end
else begin
Parameters.ParamByName('xue').value:=edit1.Text;
end;
open;
end;Top
11 楼yjian(杨健)回复于 2002-04-28 21:10:43 得分 0
var qry:TQuery;
s:string;
...
s:='select * from TempTable where name=''%s''';
Query.SQL.SetText(PChar(Format(s,[edit1.text])));
Query.Open;
or
...Top





