procedure TF_add.Button1Click(Sender: TObject);
var
cmdstr1:string;
//cmdstr2:string;
sex:string;
begin
 with adoQuery1 do
 begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    cmdstr1:='select * from person where id='+quotedstr(edit1.Text);
    adoquery1.SQL.Add(cmdstr1);
    adoquery1.Open;
   if adoquery1.RecordCount=0 then
     begin
       begin
         if radiogroup1.Items[radiogroup1.ItemIndex]='男' then
            sex:='m'
         else
           sex:='f';
        //判断性别
        end;
        //adoquery1.Close;
        adoquery1.SQL.Clear;
        adoquery1.SQL.Add('insert into person(id,password,name,sex,birthday,department,job,edu_level,specialty,address,tel,email)');
        adoquery1.SQL.Add('values(:pid,:ppassword,:pname,:psex,:pbir,:pdepart,:pjob,:pedu,:pspecialty,:padd,:ptel,:pemail)');
         Parameters.Items[0].Value:=Edit1.Text;
         Parameters.Items[1].Value:=Edit2.Text;
         Parameters.Items[2].Value:=Edit3.Text;
         Parameters.Items[3].Value:=sex;
         Parameters.Items[4].Value:=datetimepicker1.Datetime;
         Parameters.Items[5].Value:=combobox1.Text;
         Parameters.Items[6].Value:=combobox2.Text;
         Parameters.Items[7].Value:=combobox3.Text;
         Parameters.Items[8].Value:=edit5.Text;
         Parameters.Items[9].Value:=Edit6.Text;
         Parameters.Items[10].Value:=Edit7.Text;
         Parameters.Items[11].Value:=Edit8.Text;         //+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+','+quotedstr(edit3.Text)+','+quotedstr(sex)+','+datetimetostr(datetimepicker1.DateTime)+','
        // +quotedstr(combobox1.Text )+','+quotedstr(combobox2.Text)+','+quotedstr(combobox3.Text )+','+quotedstr(edit5.Text)+','+quotedstr(edit6.Text)+','
        // +quotedstr(edit7.Text)+','+quotedstr(edit8.Text)+')';
          if messagedlg('确定修改?',mtconfirmation,[mbyes,mbno],0)=mryes then       adoquery1.ExecSQL;     adoquery1.Close;
     adoquery1.Open;
      
      end
    else
      if (messagedlg('该用户已存在!是否重新添加?',mtinformation,[mbyes,mbno],0)<>mryes) then
       close;   end;
  end;

解决方案 »

  1.   

    程序上看不出有什么错.
    查你的字段及类型,不行的话先少插几个字段试试(如去掉可能出问题的birthday)
      

  2.   


          begin
            if (cxDateEdit3.Text='') or  (cxComboBox3.Text='') or (cxComboBox4.Text='') or (cxTextEdit1.Text='') or (cxTextEdit2.Text='') or (cxTextEdit3.Text='') or (rzComboBox1.Text='') or (rzComboBox2.Text='') or (rzComboBox3.Text='')then
            begin
                 MessageBox(Self.Handle,'必填数据,不能为空,请重新输入','系统提示',mb_iconquestion)
            end
            else
            begin
               with ADOQuery1 do
               begin
                    Insert;
                      FieldByName('Gtdate').AsString:=cxDateEdit3.Text;
                      FieldByName('Gtfs').AsString:=cxComboBox3.Text;
                      FieldByName('namelx').AsString:=cxComboBox4.Text;
                      FieldByName('cell').AsString:=cxTextEdit1.Text;
                      FieldByName('goutry').AsString:=cxTextEdit2.Text;
                      FieldByName('shoudafmc').AsString:=RzComboBox1.Text;
                      FieldByName('dxowzw').AsString:=cxTextEdit3.Text;
                      FieldByName('gtlx').AsString:=RzComboBox2.Text;
                      FieldByName('gtxm').AsString:=RzComboBox3.Text;
                      FieldByName('gtnr').AsString:=cxMemo1.Text;
                      FieldByName('users').AsString:=Edit1.Text;
                    Post;
               end;
              MessageBox(Self.Handle,'数据保存成功,请查看!','系统提示',mb_iconquestion);
            end;
          end;楼主,你要是向数据库插入数据,这样来写,省得拼SQL语句,也容易出错,这样写原因好查找
      

  3.   

    字串类型的要用QuotedStr包含起来。
      

  4.   

      adoquery1.SQL.Add('insert into person(id,password,name,sex,birthday,department,job,edu_level,specialty,address,tel,email)');
      adoquery1.SQL.Add('values(:pid,:ppassword,:pname,:psex,:pbir,:pdepart,:pjob,:pedu,:pspecialty,:padd,:ptel,:pemail)');  adoquery1.SQL.Add('insert into person([id],[password],[name],sex,birthday,department,job,edu_level,specialty,address,tel,email)');
      adoquery1.SQL.Add(' values(:pid,:ppassword,:pname,:psex,:pbir,:pdepart,:pjob,:pedu,:pspecialty,:padd,:ptel,:pemail)');---insert into person(id,password,name,......)values(pid,:ppassword,:pname,......)
    ---insert into person([id],[password],[name],......) values(pid,:ppassword,:pname,......)
      

  5.   

    建议用另外的方法拼写SQL
      

  6.   

    password数据库敏感,加中括号或者换个
      

  7.   

    自己直接合成sql.text吧,该用引号括起来的在合成的时候括起来就好了。
      

  8.   

    建议你将语句在MSSQL中测试一下吧,
    看看参数及语句对不对呀
      

  9.   

    把SQL语句拉出来  执行下 就知道是什么问题了
      

  10.   

    用Parameters参数的在程序测试过程中,不容易直接读出SQL代码,所以调试就麻烦,建立改用SQL.text好点要不你就换控件,都换成数据库控件,把数据源指向数据集adoquery1。直接adoquery1.post都可以保存了。
      

  11.   

    LZ加个断点跟踪一下,看看是哪一句话报错的。
    ...
      adoquery1.ExecSQL;   adoquery1.Close;
       adoquery1.Open;
     
    ...
    给我的感觉好像有点不对。先执行Insert Into语句,然后关闭,再然后不改变Insert Into语句直接打开?
      

  12.   

    adoquery1.SQL.Add('insert into person(id,password,name,sex,birthday,department,job,edu_level,specialty,address,tel,email)');
      adoquery1.SQL.Add('values(:pid,:ppassword,:pname,:psex,:pbir,:pdepart,:pjob,:pedu,:pspecialty,:padd,:ptel,:pemail)');第二句增加sql语句时 values前面少了个空格 增加就可以了
      

  13.   

    设断点,运行程序把sql语句提出来看看就知道了