这是我的代码:
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。有没有办法可以做到这一点?
答案 0 :(得分:1)
修改:我想知道MYTABLE
和if..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而不是异常。根据自己的喜好编辑:)