首先我描述一下,用的是Oracle数据库,有一个表 Table1 ,有两个字段f1和f2 均为nvchar字段,写了插入语句
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2) ');
SQL.Add('Values (:f1,:f2)');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
sql.ExecSQL
end;
一点问题没有,一切正常。
今天需要增加一个字段 f3 也是 nvhar类型,写成如下:
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2,f3) ');
SQL.Add('Values (:f1,:f2,:f3)');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
ParamByName('f3').value:='33';
sql.ExecSQL
end;
问题就出来了,报"不正常地定义参数对象.提供了不一致或不完整的信息"的错误! 测试了多遍也没有解决,将value改为assting也是一样。
最后改成 with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2,f3) ');
SQL.Add('Values (:f1,:f2,''33'')');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
sql.ExecSQL
end;
正常通过,但是做程序就要知道原因,所以在这里咨询如下:
使用ParamByName('f3').value 难道不是将 '33'按字符串处理吗? 为什么 f1 f2 就可以呢?谁给解释一下,多谢!
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2) ');
SQL.Add('Values (:f1,:f2)');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
sql.ExecSQL
end;
一点问题没有,一切正常。
今天需要增加一个字段 f3 也是 nvhar类型,写成如下:
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2,f3) ');
SQL.Add('Values (:f1,:f2,:f3)');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
ParamByName('f3').value:='33';
sql.ExecSQL
end;
问题就出来了,报"不正常地定义参数对象.提供了不一致或不完整的信息"的错误! 测试了多遍也没有解决,将value改为assting也是一样。
最后改成 with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2,f3) ');
SQL.Add('Values (:f1,:f2,''33'')');
ParamByName('f1').value:='11';
ParamByName('f2').value:='22';
sql.ExecSQL
end;
正常通过,但是做程序就要知道原因,所以在这里咨询如下:
使用ParamByName('f3').value 难道不是将 '33'按字符串处理吗? 为什么 f1 f2 就可以呢?谁给解释一下,多谢!
begin
Close;
SQL.Clear;
SQL.Add('insert into Table1 (f1,f2,f3) ');
SQL.Add('Values (:f1,:f2,''33'')');
ParamByName('f1').value:='11';
ParamByName('f2').value:=QuotedStr('22');
sql.ExecSQL
end;
ParamByName('f3').value:='''33'''; 不行的
是不是用QuotedStr 就可以?
报错"不正常地定义参数对象.提供了不一致或不完整的信息"
现在看来应该是Delphi开发IDE的BUG,最近发现好多BUG,看来Delphi真的没人维护了。
解决方法超级搞笑,保密保密!