Gravar Arquivo Texto em Campo Blob

Delphi

16/04/2006

Pessoal boa tarde, preciso gravar e ler um arquivo texto no Banco de dados em um Campo memo que foi criado assim:
´[b:706dfc17fb]MEM_Bulas´ BLOB SUB_TYPE 0 SEGMENT SIZE 80,[/b:706dfc17fb]
Uso delphi 7.0
Banco Firebird 1.5
após pesquisa aqui no forum encontrei a seguinte rotina:

cdsBulas.Close;
cdsBulas.SelectSQL.Clear;
cdsBulas.SelectSQL.add(´UPDATE Bulas´);
cdsBulas.SelectSQL.add(´SET Mem_Bula = :Mem_Bula,´);
cdsBulas.SelectSQL.add(´ Li_IDBula = :Li_IDBula´);
cdsBulas.SelectSQL.add(´ Where Li_IDBula = :Li_IDBula´);
try
cdsBulas.ParamByName(´Mem_Bula´).LoadFromFile(´C:\Desenvolvimento\Projeto\Amoxil.htm´);
cdsBulas.ParamByName(´Li_IDBula´).asinteger := 1;
cdsBulas.ExecSQL;
except
on e:exception do
begin
ShowMessage(e.message);
end;
end;
DMPrincipal.TransacaoBD.CommitRetaining;
end;

Esta Rotina Grava Perfeitamente o arquivo

Agora preciso Ler o arquivo gravado e não dá certo, gera um erro de access violation na Linha em Azul

var
BlobStream : TBlobStream;
FileStream : TFileStream;

begin
cdsBulas.Close;
cdsBulas.SelectSQL.Clear;
cdsBulas.SelectSQL.add(´Select *´);
cdsBulas.SelectSQL.add(´From Bulas´);
cdsBulas.SelectSQL.add(´ Where Li_IDBula = :Li_IDBula´);
cdsBulas.ParamByName(´Li_IDBula´).asinteger := 1;
try
cdsBulas.Open;
cdsBulas.RecordCount;
[color=blue:706dfc17fb] BlobStream := TBlobStream.Create(cdsBulas.Fieldbyname(´Mem_Bula´) as TBlobField, bmRead);[/color:706dfc17fb] FileStream := TFileStream.Create(´C:\Desenvolvimento\Projeto\Bulaamoxil.htm´, fmCreate or fmOpenWrite);
FileStream.CopyFrom(BlobStream, 0);
ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´);
finally
// Liberando memoria
FileStream.Free;
BlobStream.Free;
cdsBulas.Free;
end;
end;


Dica existente

Gravar Arquivo

Var m : Tquery;
begin
m:=TQuery.Create(self);
m.DatabaseName:=´Um\databasename\qualquer´;
m.sql.add(´UPDATE TABELA_TAL´);
m.sql.add(´SET campo_blob=:_nomearq´);
m.sql.add(´WHERE campo_chave =1´);
try
m.ParamByName(´_nomearq´).LoadFromFile(´C:\TEMP\TESTE.DOC´,ftBlob);
m.ExecSQL;
except
on e:exception do
begin
ShowMessage(e.message);
end;
end;
end;


Ler arquivo

var
BlobStream : TBlobStream;
FileStream : TFileStream;
m : Tquery;
begin
m:=TQuery.Create(self);
m.DatabaseName:=´Um\databasename\qualquer´;
m.sql.add(´SELECT campo_chave, campo_blob´);
m.sql.add(´FROM TABELA_TAL´);
m.sql.add(´WHERE campo_chave =1´);
// Salvando o arquivo em disco
try
m.Open;
BlobStream := TBlobStream.Create(m.Fieldbyname(´campo_blob´) as TBlobField, bmRead);
FileStream := TFileStream.Create(´C:\TEMP\MEU_DOC.DOC´, fmCreate or fmOpenWrite);
FileStream.CopyFrom(BlobStream, 0);
ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´);
finally
// Liberando memoria
FileStream.Free;
BlobStream.Free;
m.Free;
end;
end;


Ariovaldo

Ariovaldo

Curtidas 0

Respostas

Ariovaldo

Ariovaldo

16/04/2006

Sobe


GOSTEI 0
Ariovaldo

Ariovaldo

16/04/2006

Alguém Saberia me informar onde esta o erro?

var
BlobStream : TBlobStream;
FileStream : TFileStream;

begin
cdsBulas.Close;
cdsBulas.SelectSQL.Clear;
cdsBulas.SelectSQL.add(´Select *´);
cdsBulas.SelectSQL.add(´From Bulas´);
cdsBulas.SelectSQL.add(´ Where Li_IDBula = :Li_IDBula´);
cdsBulas.ParamByName(´Li_IDBula´).asinteger := 1;
try
cdsBulas.Open;
cdsBulas.RecordCount;
BlobStream := TBlobStream.Create(cdsBulas.Fieldbyname(´Mem_Bula´) as TBlobField, bmRead); FileStream := TFileStream.Create(´C:\Desenvolvimento\Projeto\Bulaamoxil.htm´, fmCreate or fmOpenWrite);
FileStream.CopyFrom(BlobStream, 0);
ShowMessage(´Documento salvo em disco. Clique em [OK] para prosseguir ...´);
finally
// Liberando memoria
FileStream.Free;
BlobStream.Free;
cdsBulas.Free;
end;
end;


GOSTEI 0
POSTAR