如果未满足所需条件,则阻止发布到数据库

时间:2014-09-02 00:45:45

标签: delphi delphi-xe6

这是我的代码:

procedure TDataModule2.MYTABLEBeforePost(DataSet: TDataSet);
begin
if (MYTABLE.FieldByName('DONE').Value = 1) then begin
DataSet.FieldByName('DONE_WHEN').AsDateTime:=Now;
end else  begin
DataSet['DONE_BY'] :='';
DataSet.FieldByName('DONE_WHEN').Clear;
end;
end;

Field" DONE"是一个布尔字段(在网格中表示为复选框)和字段" DONE_BY"是一个从表中接收数据的查找字段。

我要做的是,如果选中复选框并且" done_by"字段为空,则阻止发布记录。 和其他方式一样。如果" done_by"是空的"完成"未经检查。

因此,如果用户选中该复选框但忘记从查找组合中选择一个名称,则会显示一条消息。 或者他选择一个名称但忘记检查复选框。我正在使用cxGrid。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

修改:我想知道MYTABLEif..then..else中使用的DataSet之间的区别是什么程序,流程?什么类型的对象是MYTABLE

查看您当前的代码,我假设以下内容(请参阅代码中的注释)

procedure TDataModule2.MYTABLEBeforePost(DataSet: TDataSet);
begin
  if (MYTABLE.FieldByName('DONE').Value = 1) then //Checkbox checked
  begin
    //Should be done when checkbox checked and DONE_BY is not empty
    DataSet.FieldByName('DONE_WHEN').AsDateTime:=Now; 
  end 
  else  
  begin
    //Should happen if input doesn't meet conditions
    DataSet['DONE_BY'] :='';
    DataSet.FieldByName('DONE_WHEN').Clear;
  end;
end;

如果我的假设是正确的,那么应该解决它:

procedure TDataModule2.MYTABLEBeforePost(DataSet: TDataSet);
begin
  if (MYTABLE.FieldByName('DONE').Value = 1) and 
     (MYTABLE.FieldByName('DONE_BY').Value <> '') then //Checkbox checked and Done_by not empty
  begin
    //Should be done when checkbox checked and DONE_BY is not empty
    DataSet.FieldByName('DONE_WHEN').AsDateTime:=Now; 
  end 
  else  
  begin
    //Should happen if input doesn't meet conditions
    DataSet['DONE_BY'] :='';
    DataSet.FieldByName('DONE_WHEN').Clear;
    Abort;
  end;
end;

我相信Abort;部分只需Else,但我对此并不是100%肯定。

我希望这对你有所帮助,如果我误解了你的问题,请告诉我:)

修改 鉴于您的最新评论,我认为以下内容应该可以解决问题。

procedure TDataModule2.MYTABLEBeforePost(DataSet: TDataSet);
begin
  if (MYTABLE.FieldByName('DONE').Value = 1) then //Checkbox checked
  begin
    //Should be done when checkbox checked and DONE_BY is not empty
    If DataSet['DONE_BY'] <> '' then
      DataSet.FieldByName('DONE_WHEN').AsDateTime:=Now
    else
      Raise Exception.Create('Your message') 
  end 
  else  
  begin
    //Should happen if input doesn't meet conditions
    DataSet['DONE_BY'] :='';
    DataSet.FieldByName('DONE_WHEN').Clear;
    Raise Exception.Create('Your message')
  end;
end;

您可以使用abort而不是异常。根据自己的喜好编辑:)