报错为
Project project1.exe raised exception class EConvertError with message '''
is not a vaild integer value.
不知道到底哪里错了
下面是源码
unit Wlgl;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, Mask, DBCtrls,IdGlobal;type
  TFormwlgl = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    DataSource1: TDataSource;
    ADOTable1: TADOTable;
    DBGrid1: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button5: TButton;
    Button6: TButton;
    TabSheet2: TTabSheet;
    Label3: TLabel;
    DateTimePicker1: TDateTimePicker;
    DBGrid2: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure ShowModal();
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    public function isMoney(s:string):boolean ;
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Formwlgl: TFormwlgl;implementation
  uses DataBase;
{$R *.dfm}procedure TFormwlgl.FormCreate(Sender: TObject);
begin
       ADOTable1.Connection:=DataModule1.ADOConnection1;
       ADOTable1.TableName:='LairageState';
end;
procedure TFormwlgl.ShowModal();
begin
      ADOTable1.Active:=true;
      //ADOTable2.Active:=true;
      Formwlgl.Show;
end;
function TFormwlgl.isMoney(s:string):boolean ;
var
  i :integer;
begin
 i:=1;
 if length(s)=0 then
 begin
   result:=false;
   exit;
 end;
 while i<=length(s) do
 begin
   if(isNumeric(s[i])=false)and(s[i]<>'.')then
   begin
     result:=false;
     exit;
   end;
   i:=i+1;
 end;
 result:=true;
end ;
procedure TFormwlgl.Button2Click(Sender: TObject);
var
  Present: TDateTime;
  date1: string;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
       Present:= Now;
       try
       if (DBEdit1.Text='')or(length(DBEdit1.Text)>10)  then
       begin
       messageDlg('"记录编号"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit1;
       abort;
       end;
       if (DBEdit2.Text='')or(length(DBEdit2.Text)>50) then
       begin
       messageDlg('"入库商品"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit2;
       abort;
       end;
       if (DBEdit4.Text='')or(length(DBEdit4.Text)>50) then
       begin
       messageDlg('"入库规格"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit4;
       abort;
       end;
       if (DBEdit5.Text='')or(length(DBEdit5.Text)>4) or(isNumeric(DBEdit5.Text)=false)then
       begin
       messageDlg('"入库量"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit5;
       abort;
       end;
       if (DBEdit6.Text='')or(length(DBEdit6.Text)>10)then
       begin
       messageDlg('"订购单号"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit6;
       abort;
       end;
       if (DBEdit7.Text='')or(length(DBEdit7.Text)>50) then
       begin
       messageDlg('"经手人"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit7;
       abort;
       end;
       if (DBEdit8.Text='')or(length(DBEdit8.Text)>10) then
       begin
       messageDlg('"仓库号"输入错误,请重新输入!',mtWarning,[mbOk],0);
       activeControl:=DBEdit8;
       abort;
       end;
       date1:=DateTostr(DateTimePicker1.Date);
       if(date1='')or(length(date1)>50) then
       begin
        messageDlg(date1,mtWarning,[mbOk],0);
        activeControl:=DateTimePicker1;
        abort;
       end;
      // messageDlg(date1,mtWarning,[mbOk],0);
       with ADOTable1 do
       begin
       open;
       append;
       fieldByName('InID').AsInteger:=strToInt(DBEdit1.Text);
       fieldByName('LaiID').AsDateTime:=DateTimePicker1.Date;
       fieldByName('LaiDate').Value:=DateToStr(DateTimePicker1.Date);
       fieldByName('LaiStandard').AsString:=DBEdit4.Text;
       fieldByName('LaiQuantity').AsInteger:=strToInt(DBEdit5.Text);
       fieldByName('OrderNum').AsInteger:=strToInt(DBEdit6.Text);
       fieldByName('HandleManID').AsString:=DBEdit7.Text;
       fieldByName('LairageNum').AsInteger:=strToInt(DBEdit8.Text);
       post;
       end
       except
         on ex:EConvertError do
         begin
         messageDlg('输入有误,请重试!',mtWarning,[mbOk],0);
         end;
       end;end;procedure TFormwlgl.Button1Click(Sender: TObject);
begin
         //messageDlg(DateTostr(DateTimePicker1.Date),mtWarning,[mbOk],0);
         //activeControl:=DateTimePicker1;
        // abort;
         ADOTable1.Cancel;
end;procedure TFormwlgl.Button3Click(Sender: TObject);
begin
       ADOTable1.Delete;
end;procedure TFormwlgl.Button5Click(Sender: TObject);
begin
         Formwlgl.Close;
end;end.数据库为SQLserver2000
请问怎么解决?

解决方案 »

  1.   

    例:fieldByName('InID').AsInteger:=strToInt(DBEdit1.Text);
      要保証DBEdit1.Text的内容為数字...
      

  2.   

    if (DBEdit1.Text='')or(length(DBEdit1.Text)>10)  then
    begin
      messageDlg('"记录编号"输入错误,请重新输入!',mtWarning,[mbOk],0);
      activeControl:=DBEdit1;
      abort;
    end;
    仅这样判断无法保证DBEdit1.Text的内容是数字...
      

  3.   

    用下面的代码检查  try StrToInt(DBEdit1.Text)
      except
        ShowMessage('...应为数字!');
        DBEdit1.SetFocus;
        Exit;
      end;
      

  4.   

    把单元文件发给我,我给你调试一下[email protected]
      

  5.   

    老大不如直接用sql语句向数据库中提交数据。比你的简单,试试看阿,问题就会解决了。呵呵
      

  6.   

    的确应该保证输入的是数字
    在DBedit的keypress 事件里写上
    procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
    begin
        if not (key in ['0'..'9']) then
        begin
          key := #0;
        end;
    end;