在FORM1上有DBNavigator1和DBGRID1两个数据控件,都连到MASTER表(MASTER表中有四个字段,都是必填字段)。怎样实现当单击DBNavigator1上的按钮或在DBGRID中离开当前行时,如果当前行中有某个单元格未输入值,就提示输入该单元格的值?

解决方案 »

  1.   

    这是ADO数据组件的BeforePost事件处理程序
    procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
    begin
      //在此写下判断当前记录各字段值是否为空的语句就可以了。 
    end;
      

  2.   

    for i:= 0 to ADOTable1.Fields.Count - 1 do
    begin
      if ADOTable1.Fields[i].IsNull then
      begin
        ShowMessage('数据输入不全!');
        Break;
      end;
    end;
      

  3.   

    对不起,更正一下:
    procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
    var 
      i: Integer;
    begin
      for i:= 0 to ADOTable1.Fields.Count - 1 do
      begin
        if ADOTable1.Fields[i].IsNull then
        begin
          ShowMessage('数据输入不全!');
          Abort;
          Break;
        end;
      end;
    end;
      

  4.   

    var Action: TDataAction);
    begin
      if (E is EDBEngineError) then
        if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
        begin
          MessageDlg('您输入了重复的记录', mtWarning, [mbOK], 0);
          Abort;
        end;
    拿这个参考一下。
    小弟初试此道,一心求学delphi,真是入师无门,希望各位老师求徒儿于水火之中,小弟学不会delphi娶不上老婆了,哪位愿带徒儿入门,徒弟定当后报,小弟虽然才疏学浅,但天生聪明学的快, 一定不复众望,还望各位老师不弃,请受徒儿一拜。小弟oicq.910660.静候师傅您的到来。
      

  5.   

    var Action: TDataAction);
    begin
      if (E is EDBEngineError) then
        if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
        begin
          MessageDlg('您输入了重复的记录', mtWarning, [mbOK], 0);
          Abort;
        end;什么意思?代码加在哪儿?eKeyViol什么意思?
      

  6.   

    procedure TDM.table1BeforePost(DataSet: TDataSet);
    begin  
      with query1 do
      begin
        Active := False;
        SQL.Clear;
        SQL.Add('select * from employee where name=' +   tblEmployee.fieldByName('name').AsString );
        Open;
        if not EOF then
        begin
          MessageDlg('您输入的姓名已存在!',mtWarning,[mbOK],0);
          Abort;
          Exit;
        end;
      end;  
    end;以上代码存在一个问题,就是在DBGRID中点击任意一列后,点击DBNavigator上的按钮都会出现错误提示,因为DBGRID中显示的内容在employee表中肯定已存在。请问怎么解决这个问题?
      

  7.   

    BeforePost是在对数据提交前的行为。若各字段为空是就退出该条件行为。
    procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
    var 
      i,j: Integer;
    begin
      i:=ADOTable1.Fields.Count;
      for j= 0 to i-1
      begin
        if ADOTable1.Fields[j].IsNull then
        begin
          ShowMessage('数据输入不全!');
          exit;
        end;
      end;
    end