Предварительно выставить чтоб не было ошибок связанные с транзакциями, кэшем каким-то, в 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;