2016-07-21 19 views
2

に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]ではありません:組み込まれているプロパティブロブが変更されているかどうかをチェックするために

+0

レコードが編集される前のテーブルの 'Blob'フィールドの値は何でしたか?私はそれがnullだと確信しています。また、擬似コードではなくDelphiコードをいくつか表示する必要があります。あなたは私たちに推測させている。 – nolaspeaker

+0

dspropINCLBLOBSINDELTAを設定してトリックを行うかどうかを確認してください – vavan

答えて

0

TClientDataSet (サイズに応じて)ブロブとして分類されます。その場合は、OldValueNewValueを使用し、NULLをチェックして変更があったかどうかを確認する必要があります。

関連する問題