![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работать с BLOB полями в INTERBASE, через IBX компоненты. [D5, IB5.x]
s_ser © (2003-06-24 12:25:00)Мастера плиз помогите. Как лутше работать с BLOB полями в INTERBASE, через IBX компоненты.
s_ser (2003-07-04 17:01:00) [1]Запихиваю так
procedure TfrmScan.SpeedButton_fileClick(Sender: TObject);
var
name,file_name,type_file:String;
i,count_name,current_slash:Integer;
begin
OpenPictureDialog1.Execute;
name:=OpenPictureDialog1.FileName;
count_name:=Length(name);
file_name:=ExtractFileName(name);
type_file:=ExtractFileExt(name);
try
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
except
begin
//
end;
end;
if OpenPictureDialog1.FileName<>"" then
begin
dmMain.Save_Transaction.Active:=false;
dmMain.Save_Transaction.StartTransaction;
dmMain.StoredProc_All.Transaction:=dmMain.Save_Transaction;
dmMain.StoredProc_All.Database:=dmMain.DatabaseKRU;
dmMain.StoredProc_All.StoredProcName:="ADD_LETTER_ARHIV";
dmMain.StoredProc_All.Prepare;
dmMain.StoredProc_All.ParamByName("D_ID_LETTER").Value:=id_later_now;
dmMain.StoredProc_All.ParamByName("D_PAGE_DOC").Value:=1;
dmMain.StoredProc_All.ParamByName("D_NAME_DOC").Value:=file_name;
dmMain.StoredProc_All.ParamByName("D_DOC").LoadFromFile(OpenPictureDialog1.FileName,ftMemo);
dmMain.StoredProc_All.ExecProc;
dmMain.Save_Transaction.Commit;
end;
Query_file.Active:=false;
Query_file.Active:=true;
end;
а забираю обратно так
procedure TfrmScan.DBGrid1DblClick(Sender: TObject);
var
Stream:TStream;
Name:String;
Save: TFileStream;
begin
Stream:=TStream.Create;
Stream:=Query_file.CreateBlobStream(Query_file.FieldByName("DOC"),bmRead);
Name:=Query_file.FieldByName("name_doc").asString;
Query_Save.Active:=false;
Query_Save.Transaction:=dmMain.Read_Transaction;
Query_Save.ParamByName("param_doc").Value:=Query_file.FieldByName("id_doc").Value;
Query_Save.Active:=true;
Stream:=TStream.Create;
Stream:=Query_Save.CreateBlobStream(Query_Save.FieldByName("DOC"),bmRead);
Save:=TFileStream.Create("c:\"+name,fmCreate);
Save.Write(Stream,Stream.Size);
Save.Free;
Stream.Free;
end;
Робовал разные типы полей BLOB
Johnmen (2003-07-02 13:42:00) [2]Приводи код, как запихиваешь и оьратно забираешь.
s_ser (2003-07-02 13:36:00) [3]Та проблема вовсе не в том как запихнуть или потом извлечь от туда данные: если это рисунок то вообще нет никаких проблем, а вот если мы например запихиваем туда *.doc, *.xls,*.rar, то при оьратном заборе данных я получаю полный брет....
Johnmen (2003-06-24 12:38:00) [4]Пpиводим пpимepы pаботы с blob-полями (для FIBPlus, для IBX - аналогично).
pFIBDatase1BLOBFIELD - полe типа BLOB датасeта pFIBDatabase1
Чтение из блоб-поля в OleContainer
var S: TStream;
begin
if not pFIBDataset1BLOBFIELD.IsNull then
begin
S:=pFIBDataset1.CreateBlobStream(pFIBDataset1BLOBFIELD, bmRead);
try
OleContainer1.LoadFromStream(S)
finally
S.Free
end;
end;
end;
Запись в блоб-полe из OleContainer (вызываeтся в BeforePost)
var S: TStream;
begin
S:=pFIBDataSet1.CreateBlobStream(pFIBDataSet1BLOBFIELD,
bmReadWrite);
try
OleContainer1.SaveToStream(S)
finally
S.Free
end;
end;