用 try .....except来解决可去掉错误信息,不过有一点你要注意因为你设的字段不能为空必须在DBgrid中的onexit事件判断是否DBGRID中对应于不能为空的字段为空,还有一点如果你在DBGRID中已经删除了对应于不能为空的那个字段的数据,在移动"↑"或"↓"键时它会自动进行SAVE那又会出现错误的信息。

解决方案 »

  1.   

    在Table的BeforePost事件中这样写
      if Dateset.FieldByName('XX').IsNull then
      begin
        Application.MessageBox('XX的值不能为空!','警告',MB_Ok+MB_IconWarning) ;
        Abort ;
      end;
      

  2.   

    好象没有产生BeforePost事件?
    没有代码无法用try...except!
      

  3.   

    参考一下Delphi的异常处理,生成一个自己的异常类,来接管Delphi的缺省处理,就可以了。
      

  4.   

    TMyExeception = class
      procedure HandleException(Sender: TObject; E: Exception);
    end;TMyExeception.HandleException(Sender: TObject; E: Exception);
    begin
      //your code
      .
      .
    end;TForm1.FormaCreate(Sender: TObject)
    begin
      Application.Onexception=MyException.HandleException;
      .
      .
    end;
      

  5.   

    前两天休息,不好意思!
    现在给一个完整点的例子
    program Project1;uses
      SysUtils,//其中包含Exception 类的声明
      Forms,
      Unit1 in 'Unit1.pas' {Form1};type
     THG=class//声明类
     public
      procedure HP(Sender:TObject;Einstance:Exception);//声明方法
     end; procedure THG.HP(Sender:TObject;Einstance:Exception);
     begin
      //加入自己的异常处理方案
     end;var
     HG:THG; //声明全局变量
     
    {$R *.RES}begin
      HG:=THG.Create;
      Application.OnException:=HG.HP;
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.注:1、这里是全局异常处理。
        2、在缺省异常中如OnException中无代码,就调用ShowException,其提供缺省异常处理。
        3、你的例子运行 Post Database 时弹出的对话框就是ShowException的杰作。
        4、详细运用可参考 Delphi Help 的 Exception 说明。