delphi中的adoquery怎么创建动态参数?

时间:2021-08-16 17:35:06
我想在程序中为adoquery1组件,创建一个动态参数,怎么创建?
比如我要用到这样一个语句
adoquery1.sql.add('select * from table1 where name=:myname');
myname是动态参数,我是临时要创建这个参数,不想在adoquery1中parameters属性中进行创建,我想在程序中直接用语句添加,怎么创建动态参数myname??????

10 个解决方案

#1


使用字符串格式化,举个例子
adoquery1.sql.add(Format('select * from table1 where name=''%s'' and name1=''%s''',[myname, myname1]));
adoquery1.Open;

#2


adoquery1.sql.add('select * from table1 where name=:myname');
这样不就创建了myname了么?
只要在程序里设置 参数 myname 的类型和值就可以了啊.

#3


参数 myname 的类型和值也可以用代码来设置的啊.
一楼老大的办法还要考虑数据的类型哦.

#4


我好象看过一本书,程序中也是可以创建动态参数的!!当时忘了记下来!!!
现在只能在adoquery的parameters属性中添加了!!!
还有一个问题:(就是使用动态参数的问题)
(1)
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('delete * from table1 where name=:name');
//用到动态参数,但是adoquery1还没有open;
adoquery1.execsql;
(2)
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('delete * from table1');
adoquery1.open;//adoquery1在此open
adoquery1.sql.add('delete * from table1 where name=:name');
adoquery1.execsql;
两种是不是都可以?????????????????

#5


adoquery1中的sql的语句要是为空的话,能不能使用adoquery1.open呢?

#6


回楼上不能,用execsql

#7


adoquery1中的sql的语句要是为空的话,可以用execsql,但是它执行的空的代码,也就是说它不会执行,而用open则会出错????是这个意思么???

#8


Parameters.Add啊?

#9


我刚做过一个完整的动态添加参数的程序:
procedure ......
//首先在这里声明一个你要用到的变量
var
  myname:string;
begin
  with adoquery1 do
  begin
    if active then
       active:=false;
    sql.clear;
    sql.add('select * from table1 where name=:myname');
    parameters.Clear;
    parameters.AddParameter;
    parameters[0].Name:=myname;
    parameters[0].DataType:=ftString;//假设你的name字段是字符类型
    parameters[0].Value:=Edit1.Text;//在Edit控件中写查询条件给myname动态赋值
                                    //如果是其它类型的用转换函数转换一下即可
    prepared;
    open;
  end;
end;

#10


procedure ......
begin
  with adoquery1 do
  begin
    if active then
       active:=false;
    sql.clear;
    sql.add('select * from table1 where name=:myname');
    myname:=Edit1.text;
    prepared;
    open;
  end;
end;

我好象直接这样子就可以!!!!!!!!!

#1


使用字符串格式化,举个例子
adoquery1.sql.add(Format('select * from table1 where name=''%s'' and name1=''%s''',[myname, myname1]));
adoquery1.Open;

#2


adoquery1.sql.add('select * from table1 where name=:myname');
这样不就创建了myname了么?
只要在程序里设置 参数 myname 的类型和值就可以了啊.

#3


参数 myname 的类型和值也可以用代码来设置的啊.
一楼老大的办法还要考虑数据的类型哦.

#4


我好象看过一本书,程序中也是可以创建动态参数的!!当时忘了记下来!!!
现在只能在adoquery的parameters属性中添加了!!!
还有一个问题:(就是使用动态参数的问题)
(1)
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('delete * from table1 where name=:name');
//用到动态参数,但是adoquery1还没有open;
adoquery1.execsql;
(2)
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('delete * from table1');
adoquery1.open;//adoquery1在此open
adoquery1.sql.add('delete * from table1 where name=:name');
adoquery1.execsql;
两种是不是都可以?????????????????

#5


adoquery1中的sql的语句要是为空的话,能不能使用adoquery1.open呢?

#6


回楼上不能,用execsql

#7


adoquery1中的sql的语句要是为空的话,可以用execsql,但是它执行的空的代码,也就是说它不会执行,而用open则会出错????是这个意思么???

#8


Parameters.Add啊?

#9


我刚做过一个完整的动态添加参数的程序:
procedure ......
//首先在这里声明一个你要用到的变量
var
  myname:string;
begin
  with adoquery1 do
  begin
    if active then
       active:=false;
    sql.clear;
    sql.add('select * from table1 where name=:myname');
    parameters.Clear;
    parameters.AddParameter;
    parameters[0].Name:=myname;
    parameters[0].DataType:=ftString;//假设你的name字段是字符类型
    parameters[0].Value:=Edit1.Text;//在Edit控件中写查询条件给myname动态赋值
                                    //如果是其它类型的用转换函数转换一下即可
    prepared;
    open;
  end;
end;

#10


procedure ......
begin
  with adoquery1 do
  begin
    if active then
       active:=false;
    sql.clear;
    sql.add('select * from table1 where name=:myname');
    myname:=Edit1.text;
    prepared;
    open;
  end;
end;

我好象直接这样子就可以!!!!!!!!!