Все ленты — последние статьи

Firebird запись в BLOB файла и его извлечение

Предварительно выставить чтоб не было ошибок связанные с транзакциями, кэшем каким-то, в filesSDS в Optiond — poprotecteedit в true, именно с BLOB могут проблемы и ошибки записи, надо смотреть опции  

Запись

var
s:tstream;
files:tfilestream;

begin

 if OpenDialog1.Execute then begin
  DM.filesSDS.Append;
  s:=DM.filesDS.DataSet.CreateBlobStream(DM.filesDS.DataSet.FieldByName('BLOB_F') as TBlobField,bmreadwrite);
    try
    files:= tfilestream.Create(OpenDialog1.FileName,fmopenread);
    s.CopyFrom(files,files.Size);
    finally

  DM.filesSDS.FieldByName('NAME_F').AsString:=ExtractFileName(OpenDialog1.FileName);
  DM.filesSDS.FieldByName('FILE_SIZE').AsInteger:=files.Size;
  DM.filesSDS.FieldByName('AVTOR').AsString:=U_ACCSES;
  DM.filesSDS.FieldByName('U_ACCSES').AsString:=U_ACCSES;
  files.Free;
  s.Free;
  end;
   DM.filesSDS.Post;
   showmessage('Файл сохранен');

  end;
  DM.filesSDS.Close;
  DM.filesSDS.SelectSQL.Clear;
  DM.filesSDS.SelectSQL.Add('SELECT * FROM TB_FILES WHERE U_ACCSES='+''''+U_ACCSES+''''+' order by ID desc');
  DM.filesSDS.open;

 

 

Чтение.

var
s:tstream;
files:tfilestream;
begin

if LMDDirDlg1.Execute then begin

  if DM.filesDS.DataSet.FieldByName('blob_f').IsNull then exit;
  s:=DM.filesDS.DataSet.CreateBlobStream(DM.filesDS.DataSet.FieldByName('blob_f'),bmread);
    try

  if fileexists(LMDDirDlg1.Path +'\'+ DM.filesDS.DataSet.FieldByName('NAME_F').AsString) then
    files:= tfilestream.Create(LMDDirDlg1.Path+'\'+ DM.filesDS.DataSet.FieldByName('NAME_F').AsString,fmopenread)
    else files:= tfilestream.Create(LMDDirDlg1.Path+'\'+ DM.filesDS.DataSet.FieldByName('NAME_F').AsString,fmcreate);

    files.CopyFrom(s,s.Size);
  finally
  files.Free;
  s.Free;
  end;

  showmessage('Файл сохранен');
end;