0

クエリから結果を取得する 2 つの日付フィールド (start_date と end_date) がある cxGrid を使用しています。グリッドにデータを入力するときに、ユーザーが間違った日付範囲を入力できないようにしようとしています。ユーザーが start_date よりも低い end_date を入力できないようにしようとしています。私は試した :

procedure TForm1.ABSQuery1BeforePost(DataSet: TDataSet);
begin
 if (ABSQuery1.FieldByName('end_DATE').AsDateTime < ABSQuery1.FieldByName('start_DATE').AsDateTime) then
 showmessage('end date  cant be lower than start date ');
 ABSQuery1.Cancel;
end;

エラーが表示されます: データセットは挿入または編集モードではありません。どうすればこれを修正できますか、またはこれを行うためのより良い方法はありますか?

4

2 に答える 2

1

フィールドの OnValidate と の使用をお勧めしend_dateますstart_date。これは、フィールドの値を設定すると発生するためです。これは、投稿のずっと前に発生します。多くのフィールドに入力する必要があり、たとえばユーザーが投稿時に 3 番目のタブで編集し、日付の入力は最初のタブで行う場合、これは興味深いかもしれません。

procedure TForm5.DateSpanValidateValidate(Sender: TField);
begin
  if not Sender.DataSet.FieldByName('end_DATE')
    .IsNull and not Sender.DataSet.FieldByName('start_DATE').IsNull then
    if (Sender.DataSet.FieldByName('end_DATE')
        .AsDateTime < Sender.DataSet.FieldByName('start_DATE').AsDateTime) then
      raise EYourValidationError.Create(
        'end date can''t be lower than start date');
end;
于 2013-04-03T06:42:13.383 に答える