EXE no Banco de Dados !!
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
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
Curtidas 0
Respostas
Raserafim
29/08/2007
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
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
GOSTEI 0
Maic.rio
29/08/2007
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
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
GOSTEI 0
Maic.rio
29/08/2007
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
Só estou conseguindo retornar o caminho do EXE e não o Exectavel em si.
Delphi 7 que estou utilizando;
Abraços !!
Maic
GOSTEI 0
Maic.rio
29/08/2007
Se alguem ainda puder ajudar.
Ainda não consegui resolveer este problema !
Abraço a todos !
Ainda não consegui resolveer este problema !
Abraço a todos !
GOSTEI 0
Emerson Nascimento
29/08/2007
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.
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.
GOSTEI 0
Maic.rio
29/08/2007
Bom dia Emerson,
Estou fazendo da seguinte forma:
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:
Quando está como Binry ocorre um Acess Violation !
Abraços,
Maic[img][/img]
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:
Quando está como Binry ocorre um Acess Violation !
Abraços,
Maic[img][/img]
GOSTEI 0
Maic.rio
29/08/2007
Com a imagem não está visivil, segue abaixo o erro:
´Bitmap image is not valid´
Abraços,
Maic
´Bitmap image is not valid´
Abraços,
Maic
GOSTEI 0
Maic.rio
29/08/2007
Galera,
Será que alguem conseguiu algo ?
Abraços e desculpe o flame !
Maic
Será que alguem conseguiu algo ?
Abraços e desculpe o flame !
Maic
GOSTEI 0
Maic.rio
29/08/2007
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
Acho que por isso esta acontecendo esse tipo de erro.
Abraços
GOSTEI 0
Emerson Nascimento
29/08/2007
tem que ser binary
GOSTEI 0
Maic.rio
29/08/2007
Emerson,
Quando coloco com Binary, e faço a rotina que me passou, recebo um acess violation !
Abraços.
Maic
Quando coloco com Binary, e faço a rotina que me passou, recebo um acess violation !
Abraços.
Maic
GOSTEI 0
Luciano.lirio
29/08/2007
[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´);
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´);
GOSTEI 0
Docdoc
29/08/2007
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.
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.
GOSTEI 0
Docdoc
29/08/2007
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...
Penso que é auto explicativo
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
GOSTEI 0