在DBGrideh中新增记录之前查看来记录的字段是否有空,没有就新增,有就不能新增。
代码如下:注:Ddetail  LOCKTYPE 为 ltBatchOptimisticprocedure TG11Form.QdetailBeforePost(DataSet: TDataSet);
var
   tempNum:double;   bk:TBookMark;
   tempstr:string;
begin
  inherited;
  try  //showmessage(self.Ddetail.DataSet.FieldValues['GOODID']);  if self.Ddetail.DataSet.FieldByName('GoodID').IsNull then
  begin
     showmessage('请选择好商品!');
     self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
     self.Ddetail.DataSet.Cancel;
     abort;  end;  if self.Ddetail.DataSet.FieldByName('GoodID').AsString='' then
  begin
     showmessage('请选择好商品!');
     self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
     self.Ddetail.DataSet.Cancel;
     exit;
  end;  if self.Ddetail.DataSet.FieldByName('depotID').IsNull then
  begin
     showmessage('请选择好仓库!');
     self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('depotID');
     self.Ddetail.DataSet.Cancel;
     exit;
  end;  if self.Ddetail.DataSet.FieldByName('depotID').AsString='' then
  begin
     showmessage('请选择好仓库!');
     self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('depotID');
     self.Ddetail.DataSet.Cancel;
     exit;
  end;  tempNum:=(self.Ddetail.DataSet.FieldValues['OrderNum']*self.Ddetail.DataSet.FieldValues['price'])*self.Ddetail.DataSet.FieldValues['discount'];
  self.Ddetail.DataSet.FieldByName('totalMoney').AsString:=formatfloat('0.000',tempNum);  except
     self.Ddetail.DataSet.Cancel;
     self.Ddetail.DataSet.Refresh;
  end;  try
     tempstr:=self.Ddetail.DataSet.FieldValues['GoodID'];
     bk:=self.Ddetail.DataSet.GetBook;
     self.Ddetail.DataSet.First;
     tempNum:=0;     while not self.Ddetail.DataSet.Eof do
     begin
        if trim(self.Ddetail.DataSet.FieldValues['GoodID'])=tempstr then
        begin
           tempNum:=tempNum+1;
        end;
        self.Ddetail.DataSet.Next;
     end;     if tempNum>1 then
     begin
        showmessage('有相同记录!');
        self.Ddetail.DataSet.GotoBook(bk);
        self.Ddetail.DataSet.FreeBook(bk);
        self.Ddetail.DataSet.Edit;
        self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
        exit;
     end;        self.Ddetail.DataSet.GotoBook(bk);
        self.Ddetail.DataSet.FreeBook(bk);
  except
     exit;
  end;测试结果:程序有提示要“选好商品”,但是还是新增了一条空白的记录。
程序中有二种新增记录的方式:1、菜单中的“新增”。2、按向下键,DBGRIDEH自动新增。
想要的效果:上面二利“新增”记录的方法,每当新增时程序会检测是否为空,如果是空不能增新,不是空则新增一条空白记录。在线等待,情各位高手帮忙。
OK马上给分。。

解决方案 »

  1.   


      procedure   TForm1.DBGrid1ColExit(Sender:   TObject);   
      begin   
      if   DBGrid1.SelectedField.DisplayLabel   =   'a'   then               
            begin   
            if   DBGrid1.SelectedField.AsString   =   ''   then   
                    showmessage('不能为空!');   
            end;   
      end;
    试试吧……我极度不擅长数据库……
      

  2.   

    procedure   TForm1.Table1BeforePost(DataSet:   TDataSet);   
      var   
          i:   Integer;   
      begin   
          for   i:=0   to   Form1.DBGrid1.Columns.Count-1   do   
              if   Form1.DBGrid1.Columns[i].Field.AsString   =   ''   then   begin   
                  Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR   +   MB_OK);   
                  Abort;   
              end;   
      end;   
    或者这样试试?……
      

  3.   

    TO:gyk120
    我试过你这样了,还是不行。
      

  4.   

    这个要在DBGrid的OnColExit里面写的