2

私は次のms access 2003テーブルを持っています:

Invoice_Master
(
   Invoice_Id  Autonumber,
   Customer_Id  integer,
   Invoice_Date  Date/Time not null,
.
.
.
);

および次のコード(Delphi 7)

procedure TfmInvoiceMaster.adoMasterEditNewRecord(DataSet: TDataSet);
begin
  inherited;
  adoMasterEditInvoice_Date.AsDateTime := Date;
end;

新しいレコードを追加しようとすると、例外エラーsysで終了します:

フィールド 'Invoice_Date' は変更できません。

何が問題なのですか

4

1 に答える 1

3

あなたはそれを間違っています。:)

AfterEdit代わりにイベントを使用する必要があります。のヘルプ ファイルからTDataSet.AfterEdit:

AfterEdit イベント ハンドラーを記述して、データセットが編集モードになった直後に特定のアクションを実行します。AfterEdit は、レコードの編集を有効にした後、Edit によって呼び出され、計算フィールドを再計算し、データ イベント ハンドラを呼び出してレコードの変更を処理します。

次のように使用します。

procedure TfmInvoiceMaster.adoMasterAfterEdit(DataSet: TDataSet);
begin
  // No inherited call! This is an event handler, not an overridden method
  adoMasterEditInvoice_Date.AsDateTime := Date;
end;

ただし、テキストからは、レコードが編集されずに挿入されたときにそれを実行したいようです (「新しいレコードを追加しようとすると、例外エラー sys: で終了します」)。その場合は、AfterInsertまったく同じ方法を使用します。

procedure TfmInvoiceMaster.adoMasterAfterInsert(DataSet: TDataSet);
begin
  // No inherited call! This is an event handler, not an overridden method
  adoMasterEditInvoice_Date.AsDateTime := Date;
end;
于 2012-04-03T20:38:54.660 に答える