主要是abort的焦点问题.
例如在窗体上有二个连接了数据库的TDBEdit,在第一个TDBEdit的对应的检核中有这个一个检核,给第二个TDBEdit写值,如:
procedure TDataModule2.ADOQuery1MF001Validate(Sender: TField);
begin
  ADOQuery1MF002.AsString := '2'
end;
第二个TDBEdit对应的ADOQuery1MF002的检核是这样的:
procedure TDataModule2.ADOQuery1MF002Validate(Sender: TField);
begin
   if ADOQuery1MF002.AsString = '2' then
   begin
     showmessage('不能为2!');
     abort;
   end;
end;结果:我修改第一个(ADOQuery1MF001)的值时,会触发ADOQuery1MF002的检核而报错.
但是焦点却在ADOQuery1MF001上,不在ADOQuery1MF002上,谁能解决,重分...

解决方案 »

  1.   

    可以换个事件来检核啊,exit,change?
      

  2.   

    Abort是放弃所有操作,如果你对第一个赋值,导致第二个字段为2,这个时候第二个字段开始检测
    遇到错误,所以系统回到导致这个错误起始端:对第一赋值TDBEdit,焦点会一直锁定在这个TDBEdit上,直到第二个TDBEdit检测通过。但你的代码好像焦点一直会锁定在一个TDBEdit上,因为不管第一个TDBEdit怎么赋值,第二个都会赋值2
      

  3.   

    to :wzxjh2000() 
      换事件是不可能的了,因为这个事件程序里用的太多了,有上千个程序呢.
    to :pongjun64(迪安)
      我是为了做一个测试才焦点一值都会有的.我主要是想怎么才能让焦点移动报错的那个控件上.
    这个例子的ADOQuery1MF002中.我写了一个方法,类似ABORT,然后引用.但不行procedure TDataModule2.ADOQuery1MF001Validate(Sender: TField);
    begin
      ADOQuery1MF002.AsString := '2'
    end;procedure TDataModule2.ADOQuery1MF002Validate(Sender: TField);
    begin
       if ADOQuery1MF002.AsString = '2' then
       begin
         showmessage('不能为2!');
         myabort(Sender);
       end;
    end;procedure TDataModule2.myabort(filedname: TField);
    begin
      filedname.FocusControl;
      try
        Abort;
      except
        if (ExceptObject is EAbort) then
         ShowMessage('Abort 异常')
        else
         ShowMessage('其他异常');
    end;大家可以想想是不是可以重写abort,这个方法.abort是个异常,一个没有信息弹出的异常,不知道谁对这个方面比较了解.
      

  4.   

    to :wzxjh2000() 
      换事件是不可能的了,因为这个事件程序里用的太多了,有上千个程序呢.
    to :pongjun64(迪安)
      我是为了做一个测试才焦点一值都会有的.我主要是想怎么才能让焦点移动报错的那个控件上.
    这个例子的ADOQuery1MF002中.我写了一个方法,类似ABORT,然后引用.但不行procedure TDataModule2.ADOQuery1MF001Validate(Sender: TField);
    begin
      ADOQuery1MF002.AsString := '2'
    end;procedure TDataModule2.ADOQuery1MF002Validate(Sender: TField);
    begin
       if ADOQuery1MF002.AsString = '2' then
       begin
         showmessage('不能为2!');
         myabort(Sender);
       end;
    end;procedure TDataModule2.myabort(filedname: TField);
    begin
      filedname.FocusControl;
      try
        Abort;
      except
        if (ExceptObject is EAbort) then
         ShowMessage('Abort 异常')
        else
         ShowMessage('其他异常');
    end;大家可以想想是不是可以重写abort,这个方法.abort是个异常,一个没有信息弹出的异常,不知道谁对这个方面比较了解.