TLOBLocator.Read not working correctly???

WODOA

Member
Dear developers! :)

Probably an error of TLOBLocator.Read(...).

Sample:

Code:
// my BLOB size = 2 Mb
BuffSize = DefaultBuffSize; // = 3Mb

ReadedBytes := TLOBLocator.Read(Buff^, BuffSize);

After read: ReadedBytes = 3Mb!!!
Why not 2Mb ????
 
Correctly Code for this version of LOBLocator.read

Code:
ReadCount := FMaxLOBPartSize; // = 1024000
       Buff := AllocMem(FMaxLOBPartSize);
        try
          repeat
            // !!!!
            if ReadCount > LOBSize - ALOBLocator.Position then
              ReadCount := LOBSize - ALOBLocator.Position;
            ReadedBytes := ALOBLocator.Read(Buff^, ReadCount);
            SendLOBPart(ALOBLocator.Name, ALOBLocator.Size, ALOBLocator.Position,
              Buff, ReadedBytes);
          until (ALOBLocator.Position >= LOBSize);
        finally
          FreeMem(Buff);
        end;

My Original code:

Code:
Buff := AllocMem(FMaxLOBPartSize); // = 1024000
        try
          repeat
            // Sample:
            // ALOBLocator.Size = 512000
            ReadedBytes := ALOBLocator.Read(Buff^, FMaxLOBPartSize);
            // ReadedBytes = 1024000!!! Why not 512000???
            // Is no sense for return any value! "ReadedBytes = FMaxLOBPartSize"

            // Situation:
            // Buff = Buff + 513000; Buff^ = "Trash" ?????????

            SendLOBPart(ALOBLocator.Name, ALOBLocator.Size, ALOBLocator.Position,
              Buff, ReadedBytes);
          until (ReadedBytes = 0); // End of LOB
        finally
          FreeMem(Buff);
        end;

like TFileStream.Read
 
Last edited:
Back
Top