ADOQuery 中的 Parameters 是怎么一回事? 它是自动创建的吗?(30分)

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体上有一个 ADOConnection 与一个 ADOQuery

这个 ADOQuery 连到这个 ADOConnection 上.

代码这样写的
ADoQuery.close;
ADOQuery.SQL.Text :=
'SELECT ID,SName from MyTable where ID=:ID order by ID asc';
ADOQuery.Parameters.ParamByName('ID').DataType := ftInteger;
ADOQuery.Parameters.ParamByName('ID').Value := ID;
ADOQuery.Prepared;
ADOQuery.open;

这样这段代码没有问题.

但如果把这个 ADOConnection 独立出来 .放到一个 DataModaul 中.再执行这段代码就会提示 "参数 ID 没找到"
也就是
ADOQuery.Parameters.ParamByName('ID').DataType := ftInteger;
这个.

这是如何回事?
 
出现 "参数 ID 没找到" 这样的提示跟 ADOConnection 是否独立出来没有关系!
你检查是否对 ID 进行过定义。在执行上述代码时需要给 ID 先赋值。
另外:你的 ADOQuery.SQL.Text :=
'SELECT ID,SName from MyTable where ID=:ID order by ID asc';
中并没有出现参数 'ParentID' ,这句有问题吧 ADOQuery.Parameters.ParamByName('ParentID').DataType := ftInteger;
应该是 :ADOQuery.Parameters.ParamByName('ID').DataType := ftInteger;
 
那个是我发上来时写错了.
因为那个 SQL 复杂了一点
 
如果你使用这样的方式,在运行中使用代码增加参数,不会出错
query1.SQL.Clear;
query1.Parameters.Clear;
with query1.Parameters.AddParameter do
begin
name:='d1';
DataType:=ftDateTime;
Direction:=pdInputOutput;
DateTimePicker1.Time:=DateTimePicker3.Time;
Value:=DateTimePicker1.Date;
end;
query1.sql.text:='...........sql ....'
 
问题是为什么把 ADOConnection 与 ADOQuery 放一些就不会有问题?

如果要这样改的的话 ,要改的地方太多了. 郁闷
 
觉得和ADOConnection 是否独立没有关系,
你再把ADOConnection 放回去测试看看,
 
同意 zywcd 的观点

跟 ADOConnection 是否独立没关系
 
多人接受答案了。
 

Similar threads

后退
顶部