TDBDateTimePicker
fromを使用していると思いますが、this page
言いにくいのですが、現時点では質問にありません。
ただし、値が変更されるたびに発生するフィールドのOnValidate
イベントを使用できますが、それはデータがデータベースに書き込まれる段階であるため、不要な時間の無駄です。
レコードを更新しようとする前に値を検証できます。(ほぼ ?)
コントロールを終了しようとするすべての DB 対応コントロールの場合はどうなるのでOnCanUpdate
、日付のような検証イベントを簡単に追加できます。タイムピッカー。
コンポーネントを入手したソースへのリンクが見つからないため、これを使用していると仮定しますTDBDateTimePicker
。ファイルに次の行を追加し、DBDateTimePicker.pas
がインストールされているパッケージを再構築OnCanUpdate
すると、コンポーネントのオブジェクト インスペクタに新しいイベントが表示されます。このイベントを使用する場合Allowed
、重要なパラメーターが 1 つあります。これを True に設定すると、コンポーネントがレコードを更新できるようになります。False (デフォルト) に設定すると、データセット内のデータは更新されません。したがって、検証を行い、レコードを更新するかどうかを決定できる場所です。
type
TDBDateTimePicker = class;
TOnCanUpdate = procedure(Sender: TDBDateTimePicker;
var Allowed: Boolean) of object;
TDBDateTimePicker = class(TDateTimePicker)
private
FOnCanUpdate: TOnCanUpdate;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
published
property OnCanUpdate: TOnCanUpdate read FOnCanUpdate write FOnCanUpdate;
end;
procedure TDBDateTimePicker.CMExit(var Message: TCMExit);
var
Allowed: Boolean;
begin
if Assigned(FOnCanUpdate) then
begin
Allowed := False;
FOnCanUpdate(Self, Allowed);
if not Allowed then
begin
SetFocused(True);
Exit;
end;
end;
try
FDataLink.UpdateRecord;
except
SetFocus;
raise;
end;
SetFocused(False);
inherited;
end;
したがって、イベントのコードOnCanUpdate
は次のようになります (このイベントは両方の日時ピッカーに共通として使用できることに注意してください)。
procedure TForm1.DTPAddStartDateCanUpdate(Sender: TDBDateTimePicker;
var Allowed: Boolean);
begin
if (DTPAddStartDate.Date) > (DTPAddCompletionDate.Date) then
begin
// the Allowed parameter is in current code initialized to False
// when it comes into this event, so the following line has no
// sense here
Allowed := False;
// here you can display the error message or raise exception or just
// whatever you want, the record won't be modified in any way
Application.MessageBox('The completion date of a job cannot be before a ' +
'start date. The record won''t be modified ;-)', 'Date Input Error...',
MB_YESNO + MB_ICONSTOP + MB_TOPMOST);
end
else
// only setting the Allowed to True will actually allows the record to be
// updated, so if your validation passes, set the Allowed to True
Allowed := True;
end;