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