Кинуло куда-то сюда:
constructor TmySQLBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode);
var
OpenMode: DbiOpenMode;
begin
FMode := Mode;
FField := Field;
FDataSet := FField.DataSet as TmySQLDataSet;
FFieldNo := FField.FieldNo;
if not FDataSet.GetActiveRecBuf(FBuffer) then Exit;
if FDataSet.State = dsFilter then
DatabaseErrorFmt(SNoFieldAccess, [FField.DisplayName], FDataSet);
if not FField.Modified then
begin
if Mode = bmRead then
begin
FCached := FDataSet.FCacheBlobs and (FBuffer = FDataSet.ActiveBuffer) and
(FField.IsNull or (FDataSet.GetBlobData(FField, FBuffer) <> ''));
OpenMode := dbiReadOnly;
end else
begin
FDataSet.SetBlobData(FField, FBuffer, '');
if FField.ReadOnly then DatabaseErrorFmt(SFieldReadOnly,
[FField.DisplayName], FDataSet);
if not (FDataSet.State in [dsEdit, dsInsert]) then // dsSetKey
DatabaseError(SNotEditing, FDataSet);
OpenMode := dbiReadWrite;
end;
if not FCached then
begin
if FDataSet.State = dsBrowse then
FDataSet.GetCurrentRecord(FDataSet.ActiveBuffer);
Check(Engine, Engine.OpenBlob(FDataSet.Handle, FBuffer, FFieldNo, OpenMode));
end;
end;
FOpened := True;
if Mode = bmWrite then Truncate;
end;