編輯:我想知道,在什麼這是考慮到該過程的if..then..else
和DataSet
的二手MYTABLE
之間的區別? 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;
您可以使用中止而不是異常。編輯到你自己的口味:)
放棄'中止;'在你的BeforePost,以防止更新 – 2014-09-02 01:11:05