procedure TPunitive1.Button4Click(Sender: TObject);
var
  sqlstr:string;
begin
 if (edit1.Text='')or(edit2.Text='')or(edit3.Text='')or(edit4.Text='')or(edit5.Text='')or(edit6.Text='')
 or(edit7.Text='')or(edit8.Text='')then
    begin
     application.MessageBox('下面内容不能为空','提示',0+64);
     exit;
    end;
if whatsave=0 then begin
   sqlstr:='select * from Punitive where  number=0000';
    with ADOquery2 do      begin
     if active then close;
        SQL.Clear;
        SQL.Add(SQLstr);
        open;
     end;   ADOquery2.Append;
     ADOquery2.fieldvalues['number']:=edit1.text;
     ADOquery2.fieldvalues['name']:=edit2.text;
     ADOquery2.fieldvalues['glass']:=edit3.Text;
     ADOquery2.fieldvalues['level']:=edit4.Text;
     ADOquery2.fieldvalues['yuanyin']:=edit5.Text;
     ADOquery2.fieldvalues['unit']:=edit6.Text;
     ADOquery2.fieldvalues['c_time']:=edit7.Text;
     ADOquery2.fieldvalues['j_time']:=edit8.Text;
   try
      ADOquery2.post;
      ADOquery1.Requery;
   except
     application.MessageBox('学号重复请重新输入','提示',mb_ok);
     ADOquery2.delete;
     edit1.SetFocus;
     edit1.SelectAll;
     exit;
   end;
end

解决方案 »

  1.   

    至少有一个字段类型不匹配:'number'字段因为,从sqlstr:='select * from Punitive where  number=0000';这句可以看出,number字段是数值型的因此,ADOquery2.fieldvalues['number']:=edit1.text;应该改为:ADOquery2.fieldvalues['number']:=StrtoInt(edit1.text);其他的字段,照此检查
      

  2.   

        ADOquery2.FieldByName('number').AsInteger := StrToInt(edit1.text);
        ADOquery2.FieldByName('name').AsString := edit2.text;
      

  3.   

    ADOquery2.fieldvalues['number']:=edit1.text; 
    number似乎是数值型,所以要 STrToInt(edit1.text);对字段赋值时,最好给明字段类型
    ADOquery2.FieldByName(字段名).AsString 字符型
    ADOquery2.FieldByName(字段名).AsInteger int型
    ADOquery2.FieldByName(字段名).AsFloat 浮点型
    .
    .
    .
      

  4.   

    不不如直接用insert语句来实现了