sql 参数没有找到,大家看看`!(50分)

  • 主题发起人 主题发起人 xieha
  • 开始时间 开始时间
X

xieha

Unregistered / Unconfirmed
GUEST, unregistred user!
with DataFrm.adoquery1 do
begin
close;
sql.clear;
Sql.Text:='insert into bm values(:v1,:v2,:v3,:v4,:v5)';
parameters.ParamByName('v1').Value:=strtoint(edit1.Text);
parameters.ParamByName('v2').Value:=edit2.Text;
parameters.ParamByName('v3').Value:=edit2.Text;
parameters.ParamByName('v4').Value:=edit2.Text;
parameters.ParamByName('v5').Value:=edit2.Text;
prepared;
open;
end;

系统说:参数v1找不到(parameter(v1)not found)

用的是oracle数据库
怎么办啊?
 
with DataFrm.adoquery1 do
begin
close;
sql.clear;
Sql.Text:='insert into bm values(:v1,:v2,:v3,:v4,:v5)';
parameters.ParamByName('v1').Value:=strtoint(edit1.Text);
parameters.ParamByName('v2').Value:=edit2.Text;
parameters.ParamByName('v3').Value:=edit2.Text;
parameters.ParamByName('v4').Value:=edit2.Text;
parameters.ParamByName('v5').Value:=edit2.Text;
prepared;
ExecSQL;//注意不是Open
end;
 
Sql.Text:='insert into bm values(:v1 ,:v2 ,:v3 ,:v4 ,:v5 )';
,前加空格
 
改了之后还是不行,同样的错误
 
可以有好几种方法进行调试!

1.在Delphi中使用断点

2.使用SQL Monitor

3.使用数据库自己带的监视器?
 
试用以下代码:
with DataFrm.adoquery1 do
begin
close;
sql.clear;
Sql.Add('insert into bm values(:v1,:v2,:v3,:v4,:v5)');
ParamByName('v1').Value:=strtoint(edit1.Text);
ParamByName('v2').Value:=edit2.Text;
ParamByName('v3').Value:=edit2.Text;
ParamByName('v4').Value:=edit2.Text;
ParamByName('v5').Value:=edit2.Text;
prepare; //注意不是prepared;
ExecSQL; //注意不是Open
end;

 
用ADOQUERY.parameters.ParamValueS['v1']:=strtoint(edit1.Text);
不要用parameters.ParamByName('v1').Value,后者是OLEVARIANT类型,前者是VARIANT类型。
 
with DataFrm.adoquery1 do
begin
close;
sql.clear;
Sql.Add('insert into bm(field1,field2,field3,field4,field5) values(:v1,:v2,:v3,:v4,:v5)');
ParamByName('v1').Value:=strtoint(edit1.Text);
ParamByName('v2').Value:=edit2.Text;
ParamByName('v3').Value:=edit2.Text;
ParamByName('v4').Value:=edit2.Text;
ParamByName('v5').Value:=edit2.Text;
prepare;
ExecSQL;
end;
 
是因为你的adoquey
的connection 没有设置
就是没有连接或连接参数
我也曾遇到类似问题
 
with DataFrm.adoquery1 do
begin
close;
prepared; //换一下位置
sql.clear;
Sql.Add('insert into bm values(:v1,:v2,:v3,:v4,:v5)');
ParamByName('v1').Value:=strtoint(edit1.Text);
ParamByName('v2').Value:=edit2.Text;
ParamByName('v3').Value:=edit2.Text;
ParamByName('v4').Value:=edit2.Text;
ParamByName('v5').Value:=edit2.Text;

ExecSQL; //注意不是Open
end;
 
parameters.ParamByName('v1').Value:=strtoint(edit1.Text);
编译可以通过啊.
 
可以通过了,但是错误提示:
无法插入空行,行必须有一个列值集。。。。但是纪录却明明已经插入进去了,这是怎么回事?
改动程序如下:
DataFrm.table1.Append;
with DataFrm.test2 do
begin
close;
sql.clear;
Sql.Add('insert into bm(id,xm,kh) values myseq.nextval,:v2,myseq.nextval)');
parameters.ParamByName('v2').Value:=edit2.Text;
prepared;
Execsql;
end;
DataFrm.table1.Post;
 
DataFrm.table1.Append

DataFrm.table1.Post
是干什么的,他们之间的程序和它们完全无关,而且post的时候确实是企图插入空行
 
恐怕是这句的问题
Sql.Add('insert into bm(id,xm,kh) values myseq.nextval,:v2,myseq.nextval)');
采用jjy_888的方法可行
 
忘了节贴了
 
后退
顶部