Предполагам, че CommandTimeout:=0 не е желателно да го използваш, макар че върши работа...
аз използва следния код, може да е модификация на нещо което си срещал, но върши работа, поне при мен...
procedure TForm1.Button4Click(Sender: TObject);
var
MemStream: TMemoryStream;
StrSQL, ConnectionString: string;
RecordSet: _RecordSet;
RecordsAffected: olevariant;
ImgActualSize: integer;
lngOffset, iSize: integer;
Data: olevariant;
P: PByteArray;
begin
MemStream := TMemoryStream.Create;
ImageTarget.Picture.Bitmap.SaveToStream(MemStream);
MemStream.Seek(0, 0);
StrSQL := 'SELECT ENTRYID, IMAGE_DATA FROM MAIL_USERS WHERE ENTRYID={00000001-0000-0000-0000-000000000000}';
ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=C:\IMIADOAB.mdb';
Recordset := CoRecordset.Create;
Recordset.Open(StrSQL, ConnectionString, adOpenKeyset,
adLockOptimistic, adCmdText);
Data := VarArrayCreate([0, 4095], varByte);
iSize := 4096;
repeat
P := VarArrayLock(Data);
FillChar(P^, iSize, 0);
iSize := MemStream.Read(PByte(P)^, 4096);
VarArrayUnlock(Data);
if iSize > 0 then
begin
if iSize < 4096 then
VarArrayReDim(Data, iSize - 1); // must trim to the exact size
Recordset.Fields.Item['IMAGE_DATA'].AppendChunk(Data);
// append chunk to parameter object
end; // if
until iSize < 4096;
Data := Unassigned;
Recordset.Update(EmptyParam, EmptyParam);
Recordset := nil;
MemStream.Free;
end;