我目前是如下这样写, 但感觉很多不方便,只能用于简单的语句,主要是不方便跟参数走. 因为有时候语句非常大。请教诸位,要带参数走的sql 执行过程要怎么写呢?表名也是灵活的,字段有多有少,并不固定,希望大侠能指点小弟。怎么写最实用,最方便。
procedure TDtModule.LrSearch(a:string);
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add(a);
exesql;
end;
end;
procedure TDtModule.LrSearch(a:string);
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add(a);
exesql;
end;
end;
procedure TForm1.Open_Data(aDataSet:Tadoquery;aSQL:string;aParm:array of Variant);
var i:integer;
begin
with aDataSet do
begin
close;
sql.clear;
for i:=Low(aParm) to High(aParm) do
parameters[i].value"=aParm[i];
open;
end;
end;procedure TForm1.Button1Click(sender:TObject);
var aSQL_Parm:array of Variant;
begin
setlength(aSql_Parm,2);
aSQL_Parm[0]:=2; //整型参数
aSQL_Parm[1]:='2011-4-24'; //日期型参数
Open_Data(adoquery1,'select * from NCG_Dwmc where dw_ID=:dw_ID or sh_Rq>:SH_Rq ');
end;//有多种返回值的方式,楼主可以举一返三,尝试一下。执行存储过程可以只传递一个存储过程名及参数列表即可。如果要传递连接参数,也可以将过程中加入一个如Tadoconnection进去。
parameters[i].value:=aParm[i];
例如
const
s1 = 'delete from relaysence where NetId = %d and DeviceId = %d and SenceId = %d';
var
sql1: string;
begin
sql1 := Format(s1, [1,2,3]);
with adoquery1 do
begin
close;
sql.clear;
sql.add(sql1);
...//执行数据库sql语句后的相关操作
end;
end;
不知楼主是否是这个意思,或有更好的方法一起学习学习 呵呵