diff options
author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2014-03-10 12:46:30 +0000 |
---|---|---|
committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2014-03-10 12:46:30 +0000 |
commit | 5162995df6156c9f3b92f27ebc64f71bb96c0b05 (patch) | |
tree | 0392247f9886b06f4bd4843569aa79cc56313081 /packages | |
parent | ecb1530ae984ad3adfcd31594eeafeef92ecb205 (diff) | |
download | fpc-5162995df6156c9f3b92f27ebc64f71bb96c0b05.tar.gz |
* Patch from Reinier Olislagers to fix issue 17376
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@27075 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages')
-rw-r--r-- | packages/fcl-db/src/base/bufdataset.pas | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/packages/fcl-db/src/base/bufdataset.pas b/packages/fcl-db/src/base/bufdataset.pas index 94e8654158..763ed21731 100644 --- a/packages/fcl-db/src/base/bufdataset.pas +++ b/packages/fcl-db/src/base/bufdataset.pas @@ -2087,7 +2087,10 @@ end; function TCustomBufDataset.GetFieldData(Field: TField; Buffer: Pointer): Boolean; -var CurrBuff : TRecordBuffer; +var + CurrBuff : TRecordBuffer; + BlobBuff : TBufBlobField; + i : integer; begin Result := False; @@ -2105,10 +2108,28 @@ begin else CurrBuff := GetCurrentBuffer; - if not assigned(CurrBuff) then Exit; + if not assigned(CurrBuff) then Exit; //Null value If Field.FieldNo > 0 then // If =-1, then calculated/lookup field or =0 unbound field begin + if (State <> dsOldValue) and Assigned(Buffer) and (Field is TBlobField) then + for i := High(FUpdateBlobBuffers) downto Low(FUpdateBlobBuffers) do + if Assigned(FUpdateBlobBuffers[i]) and + (FUpdateBlobBuffers[i]^.FieldNo = Field.FieldNo) then + begin + // The right blob buffer: + FillChar(BlobBuff, SizeOf(TBufBlobField),#0); + if not GetFieldIsNull(pbyte(CurrBuff), Field.FieldNo-1) then + begin + inc(CurrBuff, FFieldBufPositions[Field.FieldNo-1]); + Move(CurrBuff^, BlobBuff, SizeOf(BlobBuff.ConnBlobBuffer)); + end; + BlobBuff.BlobBuffer := FUpdateBlobBuffers[i]; + Move(BlobBuff, Buffer^, SizeOf(TBufBlobField)); + Result := True; + Exit; + end; + if GetFieldIsNull(pbyte(CurrBuff),Field.FieldNo-1) then Exit; if assigned(buffer) then |