我用下面的语句来添加记录,有一个问题就是只有所有字段都赋值的时候,记录才能加入.而我希望只要某几个字段赋值就能添加,请问一下该怎么办?
procedure Tf_addperson.saveClick(Sender: TObject);
begin
  mainform.adoconnection1.begintrans;
     try
     adoquery1.sql.clear;
     adoquery1.SQL.add(' insert into person (xm,mc,sex,lb,nl,byqk,zyqk,zylb,hszs,zcqk) values (:a,:b,:c,:d,:e,:f,:g,:h,:i,:j)');
     adoquery1.parameters.ParamByName('a').value:=edxm.Text;
     adoquery1.Parameters.ParamByName('b').Value:=edmc.text;
     adoquery1.Parameters.ParamByName('c').value:=cmsex.text;
     adoquery1.Parameters.ParamByName('d').value:=cmlb.text;
     adoquery1.Parameters.parambyname('e').value:=strtoint(ednl.text);
     adoquery1.Parameters.ParamByName('f').Value:=edbyqk.Text;
     adoquery1.Parameters.ParamByName('g').value:=cmzyqk.text;
     adoquery1.Parameters.parambyname('h').value:=cmzylb.text;
     adoquery1.Parameters.ParamByName('i').Value:=cmhszs.Text;
     adoquery1.Parameters.ParamByName('j').Value:=cmzcqk.Text;
     adoquery1.ExecSQL ;
     mainform.adoconnection1.committrans;
     ccleardata(f_addperson);
     if messagedlg('继续添加记录!',mtconfirmation,[mbyes,mbno],0)=mryes
       then
         edmc.SetFocus
       else
         close;
     except
     mainform.adoconnection1.rollbacktrans;
     end;end;

解决方案 »

  1.   

    如果你只想赋前三个字段值,那就这样:
    insert into person (xm,mc,sex) values (:a,:b,:c)
      

  2.   


    adoquery1.appendrecord([nil,c1.Text,c2.Text,c3.Text,c4.Text,c5.text,c6.Text,c7.Text,c8.Text,c9.text]);
    插入时,老是出错"键列信息不足或不正确.更新影响到过多的行"
    可是最终又能把记录插入到表中这是为什么?
      

  3.   

    这样你要设置表的字段能否为空,并且,你在输入数据前该判断输入框是不是为空呀
    就是你的a,b,c....在没有输入时,该怎么处理。
      

  4.   

    如果a为空,他的adoquery1.parameters.ParamByName('a').value:=edxm.Text;就不执行
    你在前面加判断,去空是根本不用填,这样也许可以。
      

  5.   

    append后直接对表里面的要插入的字段进行插入就可以了
      

  6.   

    谢谢大家的帮助!!!
    我已经查询出来了,关键在于库里面有些字段我是能过触发器,让它自动计算,'
    可能追加时会出错,我用Update 就没事了