GARANTIR DESCONTO

Fórum EXE no Banco de Dados !! #345305

29/08/2007

0

Boa tarde galera,

Estou com uma dúvida, gostaria de salvar o EXE do meu sistema no meu banco de dados(SQL Server 2005).
Pois preciso fazer uma ´Atualizador´ para o meu sistema, msa não quero ficar preso a nenhum caminho de rede.
Nunca vi algo parecido, isso é possivel ?
E qual deverá ser o tipo do meu campo no SQL Server quando eu cria-lo? Image? Binary?

Abraço a todos !

Maic


Maic.rio

Maic.rio

Responder

Posts

29/08/2007

Raserafim

no firebird você utiliaria o tipo de dado Blob, que serve para armazenar qualquer tipo de dado binário.

então pelo nome, me parece que você deverá utiliar o Binary.

e no Delphi pode recuperar as informações deste campo (o arquivo EXE) através da função Stream


Responder

Gostei + 0

30/08/2007

Maic.rio

No firebird eu já tinha feito algo parecido, e funcionou perfeitamente, mas no SQL Server eu ainda não consegui.
Caso alguem tenha algum modelo para me mostrar como deve salvar no banco através do delphi.
Pois algumas vezes que fiz, com um campo binary, ele grava apenas o caminho do arquivo.

Abraços !
Maic


Responder

Gostei + 0

30/08/2007

Maic.rio

Alguem sabe como pegar o executavel para gravar na minha base de dados ?
Só estou conseguindo retornar o caminho do EXE e não o Exectavel em si.
Delphi 7 que estou utilizando;

Abraços !!
Maic


Responder

Gostei + 0

05/09/2007

Maic.rio

Se alguem ainda puder ajudar.
Ainda não consegui resolveer este problema !

Abraço a todos !


Responder

Gostei + 0

05/09/2007

Emerson Nascimento

TBlobField(SeuCampoBlob).LoadFromFile( CaminhoCompletoDoSeuEXE ); <- grava no banco

TBlobField(SeuCampoBlob).SaveToFile( CaminhoDestinoCompletoDoSeuArquivo ); <- salva o conteúdo do campo no HD (ou CD, FDD, DVD...)

eu recomendo que você tenha um campo onde possa guardar ao menos o nome do arquivo.

Da forma acima você pode guardar qualquer arquivo: .doc, .xls, .dwg... qualquer coisa.

Lembre-se que o campo tem que ser um BLOB que suporte dados binários.


Responder

Gostei + 0

06/09/2007

Maic.rio

Bom dia Emerson,

Estou fazendo da seguinte forma:
TBlobField(DMGestaoRisco.cdsGestaoRiscoAnexo).LoadFromFile(OpenDialog.FileName);


Já fiz teste com meu campo na Base de dados como Image e Binary.

Quando meu campo no DB está como Image ocorre sempre o seguinte erro:

[img:9d4ae483cf]http://img526.imageshack.us/img526/8329/erroun2.th.jpg[/img:9d4ae483cf]
Quando está como Binry ocorre um Acess Violation !

Abraços,
Maic[img][/img]


Responder

Gostei + 0

06/09/2007

Maic.rio

Com a imagem não está visivil, segue abaixo o erro:

´Bitmap image is not valid´

Abraços,
Maic


Responder

Gostei + 0

12/09/2007

Maic.rio

Galera,

Será que alguem conseguiu algo ?

Abraços e desculpe o flame !
Maic


Responder

Gostei + 0

12/09/2007

Maic.rio

Na Verdade meu campo não é ´Blob´, pois no SQL Server 2005 não possui esse tipo de campo, possui apenas Binary e Image.
Acho que por isso esta acontecendo esse tipo de erro.

Abraços


Responder

Gostei + 0

12/09/2007

Emerson Nascimento

tem que ser binary


Responder

Gostei + 0

12/09/2007

Maic.rio

Emerson,
Quando coloco com Binary, e faço a rotina que me passou, recebo um acess violation !

Abraços.
Maic


Responder

Gostei + 0

14/12/2007

Luciano.lirio

[code]

Srs.,

apesar desde assunto ser bem antigo não encontrei resposta para ele...

Bom, meu problema foi gravar uma imagem no meu banco de dados, da forma normal lendo o jpg convertendo para bitmap ficou muito grande então resolvi gravar como arquivo, como arquivo deu erro de conversão, ou seja, o campo tipo imagem e importando como Blob deu erro de conversão...

pesquisando na net encontrei essa forma de importar qualquer tipo de arquivo para um campo image do sql server sem que apareca erro de conversão...

Se alguem tiver uma forma melhor de fazer isso nos informe...

Dica do Site: [url]http://www.ramosdainformatica.com.br/art_recentes01.php?CDA=576[/url]

// Carrega um arquivo
TMemoField(qryFechamento.FieldByName(´ImgProtocolo´)).LoadFromFile(Abrir.FileName);


// Salva para Arquivo
if TMemoField(qryFechamento.FieldByName(´ImgProtocolo´)).BlobSize > 0 then
TMemoField(qryFechamento.FieldByName(´ImgProtocolo´)).SaveToFile(´c:\Protocolo.exe´);


Responder

Gostei + 0

14/12/2007

Docdoc

Olha acho que percebi a questão.

Vc quer guardar na base de dados o executável, mas 1 grande questão que se põe:

O executável está em execução ?

Bem se estiver vc terá que mapear o arquivo na memoria, copiar esta memoria para um arquivo temporário, ai sim mandá-lo para a base de dados.

Para gravar o arquivo na base de dados não é dificil, basta ter um campo BLOB, que são campos binarios que podem conter arquivo com gigabytes.

Para se usar um campo BLOB, vc terá que primeiro abrir o arquivo em Stream, criar um Stream para o campo, e simplesmente copiar de um stream para o outro.


Responder

Gostei + 0

14/12/2007

Docdoc

Vou colocar aqui um código que vai ensinar como gravar para campos BLOB.

O exemplo é para uma imagem mas poderá ser usado para qualquer coisa, como por ex.: um arquivo ou som etc...



procedure GravarFotoDB;
var  
  jpg: TJPEGImage;
  bmp : TBitmap;
  st: TStream;
  fs: TFileStream;
begin
  
  //cria a imagem em jpg, copiando neste exemplo de um bitmap
  bmp := TBitmap.Create;
  try
    bmp.loadfromfile("minhaimagem.bmp");
    with TJPEGImage.Create do
      try
        Assign(bmp);
        Compress; 
        SaveToFile("minhaimagem.jpg"); //<---atenção agora é um jpeg
      finally
        Free;
      end;
  finally
    bmp.free;
  end;

  //agora abre a imagem jpeg em um stream
  fs := TFileStream.Create( "minhaimagem.jpg", fmOpenRead);
  try
    //tbFoto é a tabela onde vamos guardar a foto.    
    try
      //pomos a tabela em edição, inserção
      tbFoto.Insert;

      //criamos o stream do campo blob, que no caso se chama campo ´imagem´ 
      //aqui que está o segredo, agora fica tudo + fácil, pois temos dois streams
      //o primeiro é o fs,qque é o stream de arquivo que criamos ao abrirmos o
      //arquivo jpeg. O outro é o stream do blob... 
      st := tbFoto.CreateBlobStream(tbFoto.FieldByName(´imagem´), bmWrite);

      //basta então agora copiar de um pro outro
      st.CopyFrom(fs, fs.Size);

      //fechamos a edição do registro
      tbFoto.Post;
    except
      //no caso de excessão então a tabela volta em estado browser 
      tbFoto.Cancel;
    end;
  finally
    st.free;
    fs.free;
    DeleteFile(filename);
  end;
end;



Penso que é auto explicativo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar