首先我描述一下,用的是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 就可以呢?谁给解释一下,多谢!

解决方案 »

  1.   

    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:=QuotedStr('22');
                sql.ExecSQL
              end; 
      

  2.   

    我下午写成
    ParamByName('f3').value:='''33''';  不行的
    是不是用QuotedStr 就可以?
      

  3.   

    改成ParamByName('f3').value:=QuotedStr('33'); 问题依旧,期待中!
    报错"不正常地定义参数对象.提供了不一致或不完整的信息"
      

  4.   

    问题已经解决,不需要 QuotedStr 否则存储数据库中的字段成了 ‘33’ 了
    现在看来应该是Delphi开发IDE的BUG,最近发现好多BUG,看来Delphi真的没人维护了。
    解决方法超级搞笑,保密保密!