Fórum Gravar Arquivo Texto em Campo Blob #319250
16/04/2006
0
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;
´[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
Curtir tópico
+ 0
Responder
Posts
17/04/2006
Ariovaldo
Sobe
Responder
Gostei + 0
18/04/2006
Ariovaldo
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;
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;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)