GARANTIR DESCONTO

Fórum Gravar imagem no mysql #347710

22/10/2007

0

Como gravar uma imagem que está num timage para um campo blob no mysql ?

Aqui não importa se é a melhor forma de armazenar uma imagem, apenas quero saber como fazer dessa forma. Estou falando isso porque sempre que achei essa pergunta num forum o pessoal ao invez de responder fica dizendo que é melhor salvar numa pasta, etc....


Josinaldo

Josinaldo

Responder

Posts

22/10/2007

Mayron Cachina

Ok, da uma olhadinha nessa procedure...

procedure TF_Par1.BitBtn7Click(Sender: TObject);
var Bmp: TBitMap; Jpg: TJPEGImage; Stm: TStream;
begin
OpenFoto.InitialDir:=´Diretório das fotos´;
if OpenFoto.Execute then
begin
Bmp:=TBitMap.Create;
Jpg:=TJPEGImage.Create;
try
//[ ] Captura o arquivo Jpg
Jpg.LoadFromFile(OpenFoto.FileName);
//[ ] Abre a tabela
if not (Dy1Par.DataSet.State in [dsEdit, dsInsert]) then Dy1Par.DataSet.Edit;
//[ ] Grava o diretório e o arquivo
Dy1Par.DataSet.FieldByName(´Par_DirSplash´).AsString:=OpenFoto.FileName;
//[ ] Transfere JPG para BMP
Bmp.Assign(jpg);
//[ ] Manda para o visualizador
ZDbImage1.Picture.Assign(bmp);
//[ ] Grava o que está no visualisador
Dy1Par.DataSet.Post;
//[ ] se não for JPG...
except on EInvalidGraphic do
begin
if not (Dy1Par.DataSet.State in [dsEdit, dsInsert]) then Dy1Par.DataSet.Edit;
Dy1Par.DataSet.FieldByName(´Par_DirSplash´).AsString:=OpenFoto.FileName;
//[ ] Captura o arquivo do diretório gravado na tabela
Bmp.LoadFromFile(OpenFoto.FileName);
//[ ] Manda a imagem BMP para o componente
ZDbImage1.Picture.Assign(Bmp);
//[ ] Grava a imagem do visualizador
Dy1Par.DataSet.Post;
end;
end;
//[ ] Libera os componentes criados
Bmp.Free;
Jpg.Free;
end
else
begin
if TBlobField(Dy1Par.DataSet.FieldByName(´Par_Splash´)).BlobSize > 0 then
if Confirma(´Limpar a cache ?´,´Figura´)=IdYes then
begin
if not (Dy1Par.DataSet.State in [dsEdit,dsInsert]) then Dy1Par.DataSet.Edit;
Dy1Par.DataSet.FieldByName(´Par_DirSplash´).AsString:=´´;
Qy1ParPar_Splash.AsVariant:=´´;
Dy1Par.DataSet.Post;
end;
end;
//[ ] LogoSplash é campo Blob para tela do Menú
//[ ] Checa se há imagem gravada
if TBlobField(Dy1Par.DataSet.FieldByName(´Par_Splash´)).BlobSize > 0 then
begin
try
//[ ] Cria os componentes
Bmp:=TBitMap.Create;
Stm:=TMemoryStream.Create;
//[ ] carrega a imagem na memória
TBlobField(Dy1Par.DataSet.FieldByName(´Par_Splash´)).SaveToStream(Stm);
//[ ] Transfere a imagem para o componente criado
Stm.Position:=0;
Bmp.LoadFromStream(Stm);
//[ ] Manda a foto para F_Menu
F_Menu.Image1.Picture.Graphic:=Bmp;
F_Menu.Image1.Update;
//[ ] Libera os componentes
FreeAndNil(Stm);
FreeAndNil(Bmp);
except on EInvalidGraphic do MessageDlg(´Algo deu errado !´, mtWarning, [mbOK], 1);
end;
end else
begin
F_Menu.Image1.Picture.Graphic:=F_Par1.Image1.Picture.Graphic;
F_Menu.Image1.Update;
end;
end;



Responder

Gostei + 0

06/11/2007

Josinaldo

como fazer esse código com query ? pelo que ví está usando edit, update ...


Responder

Gostei + 0

06/11/2007

Mayron Cachina

por query eu ACHO q vc só pode inserir se tiver a imagem como arquivo...

mais ve esse coódigo ai que o amigo lucasfss me passou...

Var
BinFile: TMemoryStream;
JPG: TJPEGIMAGE;
begin
JPG := TJPEGIMAGE.Create;
JPG.Assign(ImageFormPrincipal.Picture.Bitmap);

OpenPictureDialog.Execute;
DMVendaseServicos.SQLQuerySenhasdeAcesso.Close;
DMVendaseServicos.SQLQuerySenhasdeAcesso.SQL.Clear;
Try
BinFile := tmemorystream.Create;
jpg.SaveToStream(binfile);
DMVendaseServicos.SQLQuerySenhasdeAcesso.SQL.Add(´update SENHAS_DE_ACESSO set WALLPAPER =(:IMG) where CODIGO =(:X)´);
DMVendaseServicos.SQLQuerySenhasdeAcesso.ParamByName(´X´).AsString := RecebeIDOperador;
DMVendaseServicos.SQLQuerySenhasdeAcesso.ParamByName(´IMG´).LoadFromFile(OpenPictureDialog.FileName , ftBlob);
// Tabela.ParamByName(´BLOBDATA´).LoadFromStream(Binfile, ftblob);
DMVendaseServicos.SQLQuerySenhasdeAcesso.ExecSQL();
except
begin
showmessage(´Erro Gravando Imagem´);
binfile.Destroy;
exit;
end;
end;
binfile.Destroy;
DMVendaseServicos.SQLQuerySenhasdeAcesso.Active := False;



Responder

Gostei + 0

06/11/2007

Josinaldo

Perfeito ! era isso mesmo que eu queria. Obrigado.


Responder

Gostei + 0

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

Aceitar