summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-03-10 12:46:30 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-03-10 12:46:30 +0000
commit5162995df6156c9f3b92f27ebc64f71bb96c0b05 (patch)
tree0392247f9886b06f4bd4843569aa79cc56313081 /packages
parentecb1530ae984ad3adfcd31594eeafeef92ecb205 (diff)
downloadfpc-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.pas25
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