sqlserver2k数据库里面的一个表结构是这样的:
库存状况表(kczkb)MC   varchar  PK   notnull  50   工具名称
GG   varchar  PK   notnull  50   工具规格
DFL  varchar       notnull  50   工具大分类
XFL  varchar       notnull  50   工具小分类
DW   varchar                10   单位
LR   int                     8   在库领入 
MS   int                     8   磨损      
SH   int                     8   损坏
DS   int                     8   丢失
DJ   int                     8   短借
CJ   int                     8   长借
KCSL int                     8   库存数量
ZJC  int                     8   总结存
RQ   datetime      notnull   8   登记日期
BZ   varchar               100   备注现向数据库添加记录按钮的语句是这样的:
procedure Tfrminput.Button3Click(Sender: TObject);
begin
  if (Trim(Edit1.Text)='')then
  begin
    ShowMessage('工具名称不能为空!');
    Exit;
  end;
  if (Trim(Edit2.Text)='')then
  begin
    ShowMessage('工具规格不能为空!');
    Exit;
  end;  with Query4 do
  begin
    Query4.Close;
    Query4.SQL.Clear;
    Query4.SQL.Add('insert kczkb values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o)');
    Query4.ParambyName('a').AsString:=Trim(Edit1.Text); //工具名称
    Query4.ParambyName('b').AsString:=Trim(Edit2.Text); //工具规格
    Query4.ParambyName('c').AsString:=Trim(Combobox1.Text); //大分类
    Query4.ParambyName('d').AsString:=Trim(Combobox2.Text); //小分类
    Query4.ParambyName('e').AsString:=Trim(Edit3.Text); //单位
    Query4.ParambyName('f').AsInteger:=Strtoint(Trim(Edit4.Text)); //在库领入
    Query4.ParambyName('g').AsInteger:=Strtoint(Trim(Edit5.Text)); //磨损
    Query4.ParambyName('h').AsInteger:=Strtoint(Trim(Edit6.Text)); //损坏
    Query4.ParambyName('i').AsInteger:=Strtoint(Trim(Edit7.Text)); //丢失
    Query4.ParambyName('j').AsInteger:=Strtoint(Trim(Edit8.Text)); //短借
    Query4.ParambyName('k').AsInteger:=Strtoint(Trim(Edit9.Text)); //长借
    Query4.ParambyName('l').AsInteger:=Strtoint(Trim(Edit10.Text)); //库存数量
    Query4.ParambyName('m').AsInteger:=Strtoint(Trim(Edit11.Text)); //总结存
    Query4.ParambyName('n').AsDate:=DateTimePicker3.Date; //登记日期
    Query4.ParambyName('o').AsString:=Trim(Memo1.Text); //备注
    ExecSQL;
    end;
    Edit1.Clear;
    Edit2.Clear;
    Edit3.Clear;
    Edit4.Clear;
    Edit5.Clear;
    Edit6.Clear;
    Edit7.Clear;
    Edit8.Clear;
    Edit9.Clear;
    Edit10.Clear;
    Edit11.Clear;
    Memo1.Clear;
end;
-------------------------------
请问大侠,能够成功编译运行,但输入合法的数值点击添加按钮时却提示General SQLerror,无效的数据格式,请帮我看看时候是以上sql语句出现了某些毛病,谢谢了,比较着急,在线等!

解决方案 »

  1.   

    Query4.SQL.Add('insert kczkb values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o)');----------------------------------------------------------------------------------sql语句不对吧
    insert into table () values ()
    这种格式
    你再看看呢
      

  2.   

    不好意思,还是报告一样的错误啊~我已经改成Query4.SQL.Add('insert into kczkb values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o)');了。请再帮忙看看吧,辛苦了~
      

  3.   

    sql改为insert into  kczkb (MC,GG,..)   values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o)(MC,GG,..)将字段名都例出来
      

  4.   

    用adotable组建挺好的啊,比如:
    DM.ADOTInsert.Append;
          DM.ADOTInsert.FieldByName('MyPath').AsString := Edit9.Text;
          DM.ADOTInsert.FieldByName('MyTitle').AsString := Edit7.Text;
          DM.ADOTInsert.FieldByName('MyWter1').AsString := Edit4.Text;
          DM.ADOTInsert.FieldByName('MyWter2').AsString := Edit5.Text;
          DM.ADOTInsert.FieldByName('MyWter3').AsString := Edit6.Text;
          DM.ADOTInsert.FieldByName('MyKey').AsString := Edit1.Text;
          DM.ADOTInsert.FieldByName('MyDate').AsDateTime := self.DateTimePicker1.Date;
          DM.ADOTInsert.FieldByName('MyCount').AsInteger := StrToInt(self.ComboBox1.Text);
          DM.ADOTInsert.Open;
          DM.ADOTInsert.Post;记得把ADOTInsert的表属性指向你的kczkb 。我一直这么用
      

  5.   

    RQ   datetime<-      notnull   8   登记日期
    ---------------------------
    Query4.ParambyName('n').AsDate(<-):=DateTimePicker3.Date; //登记日期
    如果是我查错我首先对应一下这两句代码
      

  6.   

    回andy:还是那个错误,我快抓狂了~回hugoon:谢谢你的建议,不过,如果改为adotable的话,之前有很多东西都要改,呵呵,我还是个菜鸟,请大家多多帮忙啊~谢了~
      

  7.   

    方玉兄说的意思是:数据库里面的datetime类型在delphi里面不能对应date类型么?请指教!
      

  8.   

    发点代码你看看
    --------------------------------------------
    注意时间类型with  DM.PubQry  do
      begin
        Close;
        SQL.Clear;
        SQL.Add('insert into  t_arc  (t_artic,t_time,t_result,t_memo) values  (:t_artic,:t_time,:t_result,:t_memo)');
        Parameters.ParamByName('t_artic').Value  := TextM.Text;
        Parameters.ParamByName('t_time').Value  := DateToStr(DDT.Date);   ////////****时间类型
        Parameters.ParamByName('t_result').Value  := IFShow;   //////IFShow是integer类型
        Parameters.ParamByName('t_memo').Value   := NoteM.Text;
        ExecSQL;
        //showmessage(TextM.Text);
      end;
      

  9.   

    我觉得,一定是sql语句的错误,且是delphi写出的sql语句不符合数据库sql语句的要求~
      

  10.   

    柑桔你调试的时候应该是在execsql处错吧 如果那样就仔细检查你上面一堆的赋值了 一个个核对 看数据类型什么的是否有问题
      

  11.   

    哈哈,谢谢大家的帮忙,终于调试成功了,原因是:将Query4.ParambyName('n').AsDate:=DateTimePicker3.Date; //登记日期改为Query4.ParambyName('n').Value:=DateTimePicker3.Date; //登记日期就OK了,不过,哪儿位大侠能告诉我成功的原因么?=_=!,谢了~
      

  12.   

    顺便请教各位大侠一下,我输入表格的日期怎么还带有小时:分:秒啊?怎么去掉它们,只显示yyyy-mm-dd啊?多谢了~
      

  13.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(datetostr(DateTimePicker1.Date));
      showmessage(datetimetostr(DateTimePicker1.DateTime));
    end;