JPG em Interbase...
esta função funciona muito bem em uma tabela paradox como estou mudando meu banco de dados para interbase num faço nem idéia de como proceder nesta questão...era feito assim...
No SpeedButton tinha esta função:
no evento onchange do Datasource( isto para visualizar );
Será que tem algo similar á isto ?
Outra coisa na tabela em paradox o campo era Binary, e como ficaria isto no IB...
Valeu espero que possam me ajudar, este banco de dados é bém complicado para mexer...tá doido ....t+
No SpeedButton tinha esta função:
procedure T_FormCliente.SpeedButton11Click(Sender: TObject); var FileStream : TFileStream; BlobStream : TBlobStream; begin Table1.edit; if Opendialog1.Execute then begin FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); BlobStream := TBlobStream.Create(Table1Fig1, bmWrite); try BlobStream.CopyFrom(FileStream, FileStream.Size ); finally FileStream.Free; BlobStream.Free; end; end else Abort;
no evento onchange do Datasource( isto para visualizar );
procedure T_FormCliente.DataSource1DataChange(Sender: TObject; Field: TField); var BlobStream : TBlobStream; JpegImage : TJPEGImage; begin BlobStream := TBlobStream.Create(Table1Fig1, bmRead); if BlobStream.Size <> 0 then Begin Image3.Visible := true; JpegImage := TJPEGImage.Create; Try JpegImage.LoadFromStream(BlobStream); Image3.Picture.Assign(JpegImage); Finally BlobStream.Free; JpegImage.Free; End; End Else Image3.Visible := false;
Será que tem algo similar á isto ?
Outra coisa na tabela em paradox o campo era Binary, e como ficaria isto no IB...
Valeu espero que possam me ajudar, este banco de dados é bém complicado para mexer...tá doido ....t+
Gigatel
Curtidas 0
Respostas
Sandra
04/07/2005
Colega,
Encontrei estes tópicos e espero que ajude a buscar o que está procurando:
- [url=http://forum.clubedelphi.net/viewtopic.php?t=64501&highlight=blob+subtype]Salvar arquivo em campo BLOB[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=63431&highlight=blob+subtype]Delphi 7 - Firebird 1.5 - Gravar Foto[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=63354&highlight=blob+subtype]Sobre Gravar Imagem no BD e Tb Usar Códigos[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=61113&highlight=blob+subtype]Gravar imagem no Interbase[/url]
Sobre o campo Blob:
- [url=http://forum.clubedelphi.net/viewtopic.php?t=62452&highlight=blob+subtype]Campo Blob´s qdo usar ...[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=62122&highlight=blob+subtype]Tipo Blob - Qual Sub Type[/url]
Espero que ajude!
Encontrei estes tópicos e espero que ajude a buscar o que está procurando:
- [url=http://forum.clubedelphi.net/viewtopic.php?t=64501&highlight=blob+subtype]Salvar arquivo em campo BLOB[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=63431&highlight=blob+subtype]Delphi 7 - Firebird 1.5 - Gravar Foto[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=63354&highlight=blob+subtype]Sobre Gravar Imagem no BD e Tb Usar Códigos[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=61113&highlight=blob+subtype]Gravar imagem no Interbase[/url]
Sobre o campo Blob:
- [url=http://forum.clubedelphi.net/viewtopic.php?t=62452&highlight=blob+subtype]Campo Blob´s qdo usar ...[/url]
- [url=http://forum.clubedelphi.net/viewtopic.php?t=62122&highlight=blob+subtype]Tipo Blob - Qual Sub Type[/url]
Espero que ajude!
GOSTEI 0
Gigatel
04/07/2005
Sandra ajudou muito os links q vc postou...más sintetizei ao máximo os tópicos e conseguí fazer com que o banco de dados aceitasse as fotos, mas não consigo visualiza-las...o código para inserir as fotos em JPG no vanco de dados foi:
Tentei este que estava no mesmo tópico para visualizar:
sem sucesso...
este é o que eu uso em Paradox num teria um jeito de reformular para funcionar no IB ?
o código acima dá um pau danado...
Valeu....
procedure T_FormCliente.SpeedButton11Click(Sender: TObject); begin if Opendialog1.Execute then begin DM1.BD_Clientes.edit; Image3.Picture.LoadFromFile(Opendialog1.FileName); DM1.BD_ClientesGS_CLI_FIGURA.LoadFromFile(Opendialog1.FileName); end;
Tentei este que estava no mesmo tópico para visualizar:
var BS:TStream; MinhaImagem:TJPEGImage; Campo:tblobfield;Foto:timage; begin if Campo.AsString <> ´´ Then begin BS := TStream.Create; BS := Campo.DataSet.CreateBlobStream((Campo as Tblobfield),bmread); MinhaImagem := TJPEGImage.Create; MinhaImagem.LoadFromStream(BS); Image3.Picture.Assign(MinhaImagem); BS.Free; MinhaImagem.Free; end else Image3.Picture.Assign(nil); end;
sem sucesso...
este é o que eu uso em Paradox num teria um jeito de reformular para funcionar no IB ?
procedure T_FormCliente.DataSource1DataChange(Sender: TObject; Field: TField); var BlobStream : TBlobStream; JpegImage : TJPEGImage; begin BlobStream := TBlobStream.Create(DM1.BD_ClientesGS_CLI_FIGURA, bmRead); if BlobStream.Size <> 0 then Begin Image3.Visible := true; JpegImage := TJPEGImage.Create; Try JpegImage.LoadFromStream(BlobStream); Image3.Picture.Assign(JpegImage); Finally BlobStream.Free; JpegImage.Free; end; end else Image3.Visible := false;
o código acima dá um pau danado...
Valeu....
GOSTEI 0
Cabelo
04/07/2005
Tente assim :
procedure T_FormCliente.DataSource1DataChange(Sender: TObject;
Field: TField);
var
BlobStream : TBlobStream;
JpegImage : TJPEGImage;
begin
BlobStream := TBlobStream.Create(DM1.BD_ClientesGS_CLI_FIGURA, bmRead);
if BlobStream.Size <> 0 then
Begin
Image3.Visible := true;
JpegImage := TJPEGImage.Create;
Try
JpegImage.LoadFromStream(BlobStream);
Image3.Picture.Graphic.Assign(JpegImage);
Finally
BlobStream.Free;
JpegImage.Free;
end;
end
else
Image3.Visible := false;
procedure T_FormCliente.DataSource1DataChange(Sender: TObject;
Field: TField);
var
BlobStream : TBlobStream;
JpegImage : TJPEGImage;
begin
BlobStream := TBlobStream.Create(DM1.BD_ClientesGS_CLI_FIGURA, bmRead);
if BlobStream.Size <> 0 then
Begin
Image3.Visible := true;
JpegImage := TJPEGImage.Create;
Try
JpegImage.LoadFromStream(BlobStream);
Image3.Picture.Graphic.Assign(JpegImage);
Finally
BlobStream.Free;
JpegImage.Free;
end;
end
else
Image3.Visible := false;
GOSTEI 0
Gigatel
04/07/2005
Tente assim :
procedure T_FormCliente.DataSource1DataChange(Sender: TObject;
Field: TField);
var
BlobStream : TBlobStream;
JpegImage : TJPEGImage;
begin
BlobStream := TBlobStream.Create(DM1.BD_ClientesGS_CLI_FIGURA, bmRead);
if BlobStream.Size <> 0 then
Begin
Image3.Visible := true;
JpegImage := TJPEGImage.Create;
Try
JpegImage.LoadFromStream(BlobStream);
Image3.Picture.Graphic.Assign(JpegImage);
Finally
BlobStream.Free;
JpegImage.Free;
end;
end
else
Image3.Visible := false;
deu uma mesagem de erro
typecaste de classe inválido.
GOSTEI 0
Sremulador
04/07/2005
declare a unit db
GOSTEI 0
Gigatel
04/07/2005
declare a unit db
pra que ? declarar esta unit ?
GOSTEI 0
Cabelo
04/07/2005
Qual o tipo de campo que você usa no interbase?
GOSTEI 0
Gigatel
04/07/2005
Qual o tipo de campo que você usa no interbase?
Blob..ele está gravando na IB ´so num tô conseguindo visualizar.
GOSTEI 0
Cabelo
04/07/2005
Cara eu fiz uma gambiarra, para resolver este problema enquanto não tenho a solução dfinitiva..
Faço uma cópia do blob no HD, om um nome qualquer.. depois dou um loadfromfile deste arquivo no componente TImage
funciona legal..
só não esqueça de deletar o arquivo depois da visualização..
Faço uma cópia do blob no HD, om um nome qualquer.. depois dou um loadfromfile deste arquivo no componente TImage
funciona legal..
só não esqueça de deletar o arquivo depois da visualização..
GOSTEI 0
Gigatel
04/07/2005
Cara eu fiz uma gambiarra, para resolver este problema enquanto não tenho a solução dfinitiva..
Faço uma cópia do blob no HD, om um nome qualquer.. depois dou um loadfromfile deste arquivo no componente TImage
funciona legal..
só não esqueça de deletar o arquivo depois da visualização..
interessante...vou ver isso...
GOSTEI 0
Gigatel
04/07/2005
O erro é gerado nesta linha
Nesta linha
[/code]
BlobStream := TBlobStream.Create(BD_ClientesGS_CLI_FIGURA, bmWrite);
var FileStream : TFileStream; BlobStream : TBlobStream; begin BD_Clientes.edit; if Opendialog1.Execute then begin FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); BlobStream := TBlobStream.Create(BD_ClientesGS_CLI_FIGURA, bmWrite); try BlobStream.CopyFrom(FileStream, FileStream.Size ); finally FileStream.Free; BlobStream.Free; end; end else Abort;
Nesta linha
[/code]
BlobStream := TBlobStream.Create(BD_ClientesGS_CLI_FIGURA, bmWrite);
tanto para gravar como para visualizar///
GOSTEI 0
Gigatel
04/07/2005
SOLUÇÃO ENCONTRADA....
Para inserir a imagem.
Lista:
OpenPictureDialog.
Speed Butoon
Image
No lugar onde está escrito ´ ´GS_CLI_FIGURA´ é o campo da tabela onde vai armazenar a foto.
em um speed butoon.
criar duas funções ( para facilitar más coloque do jeito que achar melhor )
eu declarei aki...
AS funções
e para vizualizar eu não consegui colocar no evento DataChange do data source pois aí a foto apareceria automático, más dá pau a solução encontrada é colocar nos botões de avançar e voltar e no evento Onshow da tabela,
o código:
Valeu a todos que me ajudaram, más tem mais bombas por aí...está da figura foi apenas um aperitivo...e fica aí a função completa e sem gambiarras...valew..mesmo..
Para inserir a imagem.
Lista:
OpenPictureDialog.
Speed Butoon
Image
No lugar onde está escrito ´ ´GS_CLI_FIGURA´ é o campo da tabela onde vai armazenar a foto.
em um speed butoon.
If Not OpenPictureDialog1.Execute Then Exit; Image3.Picture.LoadFromFile( OpenPictureDialog1.FileName ); If DataSource1.DataSet.State = dsBrowse Then DataSource1.DataSet.Edit; GravaFoto( ´GS_CLI_FIGURA´, OpenPictureDialog1.FileName );
criar duas funções ( para facilitar más coloque do jeito que achar melhor )
eu declarei aki...
public Procedure GravaFoto( NomeCampo, FileName: String ); Procedure ObtemFoto( NomeCampo: String; Var imgDestino: TImage );
AS funções
Procedure T_FormCliente.GravaFoto( NomeCampo, FileName: String ); Var stImagem: TFileStream; Begin stImagem := TFileStream.Create( FileName, fmOpenRead Or fmShareDenyWrite ); Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).LoadFromStream( stImagem ); Finally stImagem.Free; End; End; Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; Begin If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); Finally stMem.Free; jpgImg.Free; End; end;
e para vizualizar eu não consegui colocar no evento DataChange do data source pois aí a foto apareceria automático, más dá pau a solução encontrada é colocar nos botões de avançar e voltar e no evento Onshow da tabela,
o código:
_FormCliente.ObtemFoto( ´GS_CLI_FIGURA´, _FormCliente.Image3 );
Valeu a todos que me ajudaram, más tem mais bombas por aí...está da figura foi apenas um aperitivo...e fica aí a função completa e sem gambiarras...valew..mesmo..
GOSTEI 0
Sremulador
04/07/2005
pode mandar...
GOSTEI 0
Gigatel
04/07/2005
Problemas e bug´s... Aconteceu uma coisa muito curiosa, no meu formulário existe um PAGECONTROL onde determino onde fica as formas do formulário, na primeira parte ( PAGE1 ) fica os ítens de cadastro,nome end. etc....na sengunda parte ( PAGE 2 ) fica onde insiro a foto, depois de tudo cadastrado onde fica o PAGE 1 posso navegar pelos registros sem problemas ( inclusive onde num tem foto cadastrada ), más se coloco o no PAGE 2 ele dá um erro ( JPG erro #42 ) más somente neste ponto ( PAGE 2)...será que tem alguma coisa a ver com o IMAGE1 estar sempre visivél ?
veja...o código.
estranho...muito estranho...
para visualizar uso este código
_FormCliente.ObtemFoto( ´GS_CLI_FIGURA´, _FormCliente.Image1 );
valeu...
veja...o código.
Procedure T_FormCliente.GravaFoto( NomeCampo, FileName: String ); Var stImagem: TFileStream; Begin stImagem := TFileStream.Create( FileName, fmOpenRead Or fmShareDenyWrite ); Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).LoadFromStream( stImagem ); Finally stImagem.Free; End; End; Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; Begin If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); Finally stMem.Free; jpgImg.Free; End; end;
estranho...muito estranho...
para visualizar uso este código
_FormCliente.ObtemFoto( ´GS_CLI_FIGURA´, _FormCliente.Image1 );
valeu...
GOSTEI 0
Kapak
04/07/2005
O problema pode estar na imagem do banco de dados; pode não ser um jpg ou outra coisa. Veja a definição do erro em:
http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/JpegErrors.txt
http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/JpegErrors.txt
GOSTEI 0
Gigatel
04/07/2005
se eu desabilitar o image num dá o pau tem como colocar na fução quando naum houver figura o image ficar em FALSE ?
GOSTEI 0
Kapak
04/07/2005
Vc pode testar TBlobField.BlobSize > 0 antes de carregar a imagem.
GOSTEI 0
Gigatel
04/07/2005
Vc pode testar TBlobField.BlobSize > 0 antes de carregar a imagem.
Valeu más num é para esta função e sim para esta...
Procedure T_FormCliente.GravaFoto( NomeCampo, FileName: String ); Var stImagem: TFileStream; Begin stImagem := TFileStream.Create( FileName, fmOpenRead Or fmShareDenyWrite ); Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).LoadFromStream( stImagem ); Finally stImagem.Free; End; End; Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; Begin If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); Finally stMem.Free; jpgImg.Free; End; end;
valew..
GOSTEI 0
Kapak
04/07/2005
Qual delas ? tem duas. Se for a que obtém a foto, vc tem o TBlobField e pode testar a propriedade BlobSize. E nas duas vc Streams e pode testar
a propriedade Size.
a propriedade Size.
GOSTEI 0
Gigatel
04/07/2005
Qual delas ? tem duas. Se for a que obtém a foto, vc tem o TBlobField e pode testar a propriedade BlobSize. E nas duas vc Streams e pode testar
a propriedade Size.
credo ne ví. que tinha duas funções...
é este..e como ficaria na função ?
Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; Begin If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; Try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); Finally stMem.Free; jpgImg.Free; End; end;
GOSTEI 0
Kapak
04/07/2005
Tente implementar no primeiro [b:346c6b5e4a]if[/b:346c6b5e4a]:
If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull or (TBlobField(DataSource1.DataSet.FieldByName( NomeCampo)).BlobSize = 0) Then Begin imgDestino.Picture := Nil; Exit; End;
GOSTEI 0
Gigatel
04/07/2005
Tente implementar no primeiro [b:a1ccab7870]if[/b:a1ccab7870]:
If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull or (TBlobField(DataSource1.DataSet.FieldByName( NomeCampo)).BlobSize = 0) Then Begin imgDestino.Picture := Nil; Exit; End;
É isso aí............deu certinho...muito obrigado...
GOSTEI 0
Gigatel
04/07/2005
Aki está a função completa...
Agradecimentos para todos más em epecial a pessoal que ajudou a resolver este problema: kapak, sremulador, Cabelo.
T+ galera ( ou até daki a pouco até agarrar em outra função )..
Procedure T_FormCliente.ObtemFoto( NomeCampo: String; Var imgDestino: TImage ); Var jpgImg: TJPEGImage; stMem: TMemoryStream; begin If TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).IsNull or (TBlobField(DataSource1.DataSet.FieldByName( NomeCampo)).BlobSize = 0) Then Begin imgDestino.Picture := Nil; Exit; End; jpgImg := TJPEGImage.Create; stMem := TMemoryStream.Create; try TBlobField( DataSource1.DataSet.FieldByName( NomeCampo ) ).SaveToStream( stMem ); stMem.Position := 0; jpgImg.LoadFromStream( stMem ); imgDestino.Picture.Assign( jpgImg ); finally stMem.Free; jpgImg.Free; end;
Agradecimentos para todos más em epecial a pessoal que ajudou a resolver este problema: kapak, sremulador, Cabelo.
T+ galera ( ou até daki a pouco até agarrar em outra função )..
GOSTEI 0