Ver código fonte

* Patch from Reinier Olislagers to fix issue #17376

git-svn-id: trunk@27075 -
michael 11 anos atrás
pai
commit
42d671ed51
1 arquivos alterados com 23 adições e 2 exclusões
  1. 23 2
      packages/fcl-db/src/base/bufdataset.pas

+ 23 - 2
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