数据连接方式如下:qry_Stud ---> ds_Stud ---> DBGrid_Stud.(ADO组件)
假设表TblStud 有三个字段, a, b, c 
在用dbgrid录入数据时,有一个checkField函数,检测三个字段输入是否正确,比如(C>60)才行.
因此,我在qry_Stud 的 BeforePost 或 AfterPost 事件里,调用CheckField函数,当CheckField返回False时,可以给用户必要的信息提示.可是,这种问题怎样处理?
当用户编辑最后一条数据时,只录入了两上字段,然后就把鼠标点到表格的其它行上,于是,产生了AfterPost事件,也弹出了错误提示, 此时,我该怎样让光标返回到这条没有编辑完的记录上呢?也就是,一条数据没有录入完成时,不允许数据定位到其它行上(允许单击"删除"按钮,来删除数据).

解决方案 »

  1.   

    在beforePost里写代码就可以了procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
    begin
      checkField(DataSet);
    end;procedure TForm1.checkField(DataSet: TDataSet);
    begin
      if DataSet.FieldByName('ID').AsInteger < 0 then
      begin
        ShowMessage('ID不能为负数!');
        DBGrid1.SelectedField := DataSet.FieldByName('ID');
        DBGrid1.EditorMode := True;
        Abort;//一定要抛出异常,来阻止DataSet.Post
      end;
      //...check other fields
    end;
      

  2.   

    谢谢楼上的兄弟啊,我就差一个Abort .