にnullを示していますTBlobField.OldValueは、常に私は次のような構造を持つ単純なデータセットを持ってBeforeUpdateRecordとAfterUpdateRecordイベント
Server.FieldDefs.Add('Code', ftString, 5);
Server.FieldDefs.Add('Memo', ftMemo, 0);
Server.FieldDefs.Add('Blob', ftBlob, 0);
データセットは、一つのレコードを持っています。次に、TClientDataSetインスタンスでTDataSetProvider経由でデータセットを取得し、データとApplyUpdateを変更します。 TDataSetProviderのBeforeUpdateRecordイベントとAfterUpdateRecordイベントをトリガします。
はしかし、ftBlobフィールドのOldValueプロパティは常にnullを示すが、ftMemoとftStringフィールドがnullではない示しています
OnBeforeUpdateRecord
Code.OldValue is not null
Code.NewValue is not null
Memo.OldValue is not null
Memo.NewValue is not null
Blob.OldValue is null
Blob.NewValue is not null
OnAfterUpdateRecord
Code.OldValue is not null
Code.NewValue is not null
Memo.OldValue is not null
Memo.NewValue is not null
Blob.OldValue is null
Blob.NewValue is not null
ftMemoフィールドがあまりにも正しい結果を返しませんが。 ftMemoフィールドのOldValueは常に空の文字列です。
私はRSP-15519に問題を報告しました。サンプルプロジェクトもそこからダウンロードできます。
これがMidasのデザインかどうか疑問に思っていますか?それともバグですか?
function BlobIsModified(CDS: TClientDataSet; BlobFieldName: string): Boolean;
begin
Exit((CDS.Fields.FieldByName(BlobFieldName) as TBlobField).Modified);
end;
Trueを返しCDS.Fields.FieldByName(field_name).IsBlob
とき私たちはこれを使用すると、これらの文字列型がかもしれないのでCDS.Fields.FieldByName(field_name).DataType
は、[ftString, ftWideMemo, ftWideString]
ではありません:組み込まれているプロパティブロブが変更されているかどうかをチェックするために
レコードが編集される前のテーブルの 'Blob'フィールドの値は何でしたか?私はそれがnullだと確信しています。また、擬似コードではなくDelphiコードをいくつか表示する必要があります。あなたは私たちに推測させている。 – nolaspeaker
dspropINCLBLOBSINDELTAを設定してトリックを行うかどうかを確認してください – vavan