最近在写一个程序在delphi中使用如下语句
query1.sql.add('insert into a (b,c) values (null,null)')
这句话是能通过的但改成
query1.sql.add('insert into a (b,c) values (:p_b,:p_c)');
query1.parambyname('p_b').value:=null;
query1.parambyname('p_c').value:=null;
就通不过,应该怎么写呢.

解决方案 »

  1.   

    query1.sql.add('insert   into   a   (b,c)   values   (:p_b,:p_c)'); 
    query1.parambyname('p_b').value:=''; 
    query1.parambyname('p_c').value:=''; 
      

  2.   

    sql中和delphi中的null的用法是有区别的
    你的第一句是执行sql语句,后边的是pascal语句了
    你的标题是空值,那么就是'',null不是空值的意思
      

  3.   

    因为我那个字段 是数值型,我用STRTOINT('')也不行。
      

  4.   

    3楼说的对
    用insert       into       a       (b,c)       values       (null,null)就可以了
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     with  adoquery1 do
       begin
         close;
         sql.Clear ;
         sql.Text:='insert into jx(user_id,user_name)values(:user_id,:user_name)';
        // Parameters.ParamByName('user_id').Value:='';
         Parameters.ParamByName('user_id').Value:=null;
         Parameters.ParamByName('user_name').Value:='f';
         ExecSQL ;
       end;
    end;
    用null或''到数据库的值是不同的 楼主你试下  这是我测试的代码  没有问题 
      

  6.   

    试过的,不行呀,我用的是INTERBASE的数据库,如果直接写
    insert  into  a   (b,c)   values  (null,null)是没问题的,关键是用parambyname('a').value:=null
    就不行了,提示要报错说值为空.但我的字段是设置为允许为空的.
      

  7.   

    这样写在SQLSERVER2000中是可以的
    query1.sql.add('insert   into   a   (b,c)   values   (:p_b,:p_c)'); 
    query1.parambyname('p_b').value:=null; 
    query1.parambyname('p_c').value:=null; 
      

  8.   

    怪了,难道是BUG?不会呀,从报错的对话框看不像是BUG
      

  9.   

    我后来又试了试,用ACCESS+ADO的方式都能行的.