Como gravar um executável no BLOB??

Firebird

01/02/2006

Tipow, não sabia se perguntava em delphi ou aqui mas como tem mais a ver com banco...
Queria gravar um executávelzinho de uns 200 ou 300 k no banco de dados. Me disseram que dá pra gravar num BLOB. Como eu faço???


Marcosrocha

Marcosrocha

Curtidas 0

Respostas

Sremulador

Sremulador

01/02/2006

Você pode utilizar o stream...


GOSTEI 0
Rtava

Rtava

01/02/2006

Costumo usar ADO para acesso ao BD. Da forma descrita abaixo dá para grava texto, imagem, executável ou qualquer outra coisa no BLOB. Com ADO pode ser feito assim:

Var Stm: TStream;
    fl: TFileStream;
begin
   qrr.Open;

//////////////////  SALVANDO DADOS NUM BLOB ///////////////////
   Stm := TStream.Create;
   // Cria um FileStream, lendo um determinado arquivo em disco
   fl := TFileStream.Create(´c:\temp\ngame.zip´, fmOpenRead);

   // Insere um registro
   qrr.Append;
   // Cria um campo do tipo TBlobStream, apontado para o campo Blob do banco de dados
   Stm := qrr.CreateBlobStream(qrr.FieldByName(´xx´), bmReadWrite);
   // Copia o conteúdo do arquivo aberto a partir do disco, para dentro da
   // variável TBlobStream, representada aqui por "Stm"
   Stm.CopyFrom(fl, fl.Size);
   // LIBERA O TBlobStream DA MEMÓRIA
   // Este Stream deve obrigatoriamente ser liberado antes do Post
   Stm.Free;

   qrr.Post;
   qrr.Requery;
   fl.Free;


//////////////////  LENDO DADOS DE UM BLOB ///////////////////
   Stm := TStream.Create;
   // Aponta em disco o path e o nome do arquivo que deve ser criado
   // contendo o conteúdo do campo Blob do registro apontado
   fl := TFileStream.Create(´c:\temp\ngame_aaa.zip´, fmCreate);

   // Abre o registro para edição (OBRIGATORIAMENTE)
   qrr.Edit;
   // Cria um campo do tipo TBlobStream e carrega o conteúdo do campo
   // Blob do registro apontado na tabela
   Stm := qrr.CreateBlobStream(qrr.FieldByName(´xx´), bmReadWrite);
   // Atribui o conteúdo do TBlobStream ao TFileStream para que seja
   // possível salvá-lo em disco, com o nome apontado logo acima.
   fl.CopyFrom(Stm, Stm.Size);
   qrr.Post;

   Stm.Free;
   fl.Free;
end;


Qualquer poste a dúvida novamente.
t+


GOSTEI 0
POSTAR