Anda di halaman 1dari 13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

Sign In

Create Account

Programao e assuntos relacionados

Pascal/Delphi

View New Content

BemvindoUnidev
Registreparateracessoatodososrecursosdosite.Umavezregistradoelogado,vocpodercriartpicos,postaremtpicosjexistentes,gerenciarseuperfil
emuitomais.Sevocjtemumaconta,faa login aquiouentocrie aqui uma contaagoramesmo!

recuperar imagens no banco de dados


Started by rogeriodilima , Abr 03 2008 11:02

rogeriodilima

Posted 03 abril 2008 - 11:02

ola.
Eu li eu varios topicos e vi que o pessoal recomenda gravar o caminho da imagem no banco ao invs de gravar a imagem, mas no meu caso eu
realmente tenhu que gravar as imagens no banco.
eu to usando um campo blob e ta funcionando direitinho.
s que eu to precisando de fazer um negocio, fazer uma leitura na tabela tipo usando um 'while not eof' e conforme for encontrando as imagens
na tabela ir criando Timages's e adicionando a imagem neles...
eu at tentei fazer isso...uma hora ao invs de criar a imagem criou um novo form que naum tinha fim...e travou tudo..a outra hora adicinou um
monete de caracteres no timage tipo quando vc tenta abrir uma imagem com o bloco de notas...
alguem pode me ajudar....

http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

1/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

to usando os componentes da tabela interbase e firebird..

Rock

Posted 03 abril 2008 - 12:40

Bom, o que que no deu certo?


Voc sabe instanciar objetos em tempo de execuo?

rogeriodilima

Posted 03 abril 2008 - 02:49

procedure TForm1.BitBtn1Click(Sender: TObject);


var
Imagem: TImage;
i: integer;
espaco: integer;
begin
ScrollBox1.HorzScrollBar.Position:=0;
with IBQuery1 do
begin
close;
sql.Clear;
sql.add('select * from TB_PRODUTO');
Open;
end;
espaco:=10;
while not IBQuery1.Eof do
begin
Imagem := TImage.Create(Self);
Imagem.Parent := Form1.ScrollBox1;
Imagem.Width:=100;
Imagem.Height:=95;
Imagem.Top:=5;
Imagem.Stretch:=true;
Imagem.Left := espaco;
Imagem.Picture.LoadFromFile(IBQuery1IMAGEM_PRODUTO.Value);
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

2/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

espaco:=espaco+Imagem.Width+10;
IBQuery1.Next;
end;
end;

do jeito que ta ai,,,parece que o Timage nao reconhece a extenso do arquivo...esse o erro que deu agora

Rock

Posted 03 abril 2008 - 04:45

Muda o self do Create para o nome do scrollbox e adiciona um Imagem.Parent := ScrollBox1 s para garantia

rogeriodilima

Posted 03 abril 2008 - 06:47

deu o mesmo erro


Project project1.exe raised exception class EInvalidGraphic with message 'Unknown picture file extension (.)'.Process Stopped .Use step or run
to continue

Rock

Posted 03 abril 2008 - 07:15

porque voc no usa um DBimage?

rogeriodilima

Posted 03 abril 2008 - 07:55

no cadastro eu uso o dbimage ai funciona certinho..eu gravo..ai quando quero ver o registro dinovo aparece a imagem normalmente..
agora nessa parte ai que eu to modificando meu programa....quero que tudo fique gravado no banco..ao inves de ficar colocando em pastas...
ai eu ja testei com DBimage e da o mesmo erro tbm..
.o meu campo blob ta subtype 0
oque esta parecendo que grava a imagem no banco,,,,mas quando eu quero recuperar ela...dai ela ta no formato ascii , rtf ou sei la oque..dai
naum ta reconhecendo esse arquivo
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

3/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

rogeriodilima

Posted 03 abril 2008 - 08:04

agora ja deu outro erro.,,criou tipo um novo form dizendo a mesma mensagem de erro e depois eu monte simbolos...e dai trava tudo

Rock

Posted 03 abril 2008 - 09:00

Olha, eu no mexo com firebird (eu pessoalmente acho horrorosa a idia de criar um mini-servidor em cada mquina), utilizo o mysql no lugar
e estou pensando em utilizar tambm o SQLServer da M$. Criei a seguinte tabela:
CREATE TABLE `table1` (
`field1` blob
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Complexa, no?

Bom, com essa tabela mais duas units:


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, DBCtrls, DB, ADODB, Buttons;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBImage1: TDBImage;
Button1: TButton;
Button2: TButton;
OpenPictureDialog1: TOpenPictureDialog;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

4/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

procedure BitBtn2Click(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ADOTable1.Open;
ADOTable1.Insert;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
FORM2.SHOWMODAL;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOTable1.Post;
ADOTable1.Close
end;
end.

e a outra
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

5/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, DB, ADODB, StdCtrls, Buttons;
type
TForm2 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DBImage1: TDBImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
ADOTable1.Prior;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
ADOTable1.Next;
end;

http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

6/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);


begin
ADOTable1.Close;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
ADOTable1.Open;
ADOTable1.First;
end;
end.

Aqui em casa funcionou tudo normal, tive problemas apenas com tamanho dos arquivos, no aceitou arquivos muito grandes, apenas arquivos
com resoluo prxima de 75x75. Poste mais detalhes do source ou execute o programa apertando F7 ( necessrio apertar F7 para executar
cada linha) e informe em qual linha est acontecendo o erro. Com a mensagem de erro em foco, aperte Ctrl+C e cole a mensagem aqui para que
possamos analisar...

Pequeno detalhe: Esse source no vai funcionar se voc no instalar o MySQL ODBC Driver e utilizar o ADOConnection para operar....

rogeriodilima

Posted 03 abril 2008 - 10:16

o meu como eu disse a parte de cadastro funciona certinho...alias o meu codigo de add a imagem no dbimage igual o seu.. ai eu posso entrar
em qualquer registro que consigo ver a imagem..

mais oque eu preciso e fazer uma leitura da tabela do inicio ao fim e a cada imagem encotrada add ela num timage,,dbimage..etc.
+- isso
procedure TForm1.Button1Click(Sender: TObject);
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

7/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

var B : TStream;
jpg: TJPEGImage;
espaco: integer;
Begin
with IBQuery1 do
begin
close;
sql.Clear;
sql.add('select * from TB_PRODUTO');
Open;
end;
while not IBQuery1.Eof do
begin
IMAGE1.Picture.Assign(nil);
jpg := nil;
B := IBQuery1.CreateBlobStream(IBQuery1.FieldByName('IMAGEM_PRODUTO'), BMREAD);
IF B.Size > 0 then
begin
try
Jpg := TJPEGImage.Create;
//jpg := tjvdbImage.Create(ScrollBox1);
//jpg.Parent :=ScrollBox1;
//jpg.Width:=100;
//jpg.Height:=95;
//jpg.Top:=5;
//jpg.Stretch:=true;
//jpg.Left := espaco;
//jpg.Picture.LoadFromFile(IBQuery1IMAGEM_PRODUTO.Value);
espaco:=espaco+jpg.Width+10;
Jpg.LoadFromStream(

IMAGE1.Picture.Assign(jpg);
//JvThumbView1.AddFromStream(

except
end;
end
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

8/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

else
IMAGE1.Picture.Assign(nil);
jpg.Free;
b.Destroy;
IBQuery1.Next;
end;
end;
esse codigo ai funciona....porem naum to conseguindo add os timage dentro do scroolbox,,
pq a variavek jpg do tipo tjpegimage...ai se eu mudo ela pra Timage
dai nuam reconhece a pate do loadfromStream. e nem as propriedades top...left,,,etc

rogeriodilima

Posted 03 abril 2008 - 10:27

ai eu tbm tenhu esse outro codigo que menor e mais pratico, pq uso um componente que conforme vai encontrando imagem vai criando como
se fosse ums timage automatico,,(jvthumbviewe) da paleta JEDI
s que num ta aparecendo as imagens,,,esta criando mais tudo vazio
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with IBQuery1 do
begin
close;
sql.Clear;
sql.add('select * from TB_PRODUTO');
Open;
end;
while not IBQuery1.Eof do
begin
JvThumbView1.Size:=60;
JvThumbView1.AddFromFile(IBQuery1IMAGEM_PRODUTO.Value);
IBQuery1.Next;
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

9/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

end;
end;

Rock

Posted 03 abril 2008 - 10:31

No conheo o JpegImage, ele num tem o loadfromstream? porque o timage tem..., se tiver, muda essa linha:
//jpg.Picture.LoadFromFile(IBQuery1IMAGEM_PRODUTO.Value)

para
//Image1.Picture.Bitmap.LoadFromStream(b)

O Stream do Timage fica escondido dentro do (sub)objeto Bitmap

rogeriodilima

Posted 03 abril 2008 - 10:57

num tinha visto que o loadfromstrem ficava dentro da propriedade bitmap


ento mais isso ai que vc passou ta certo..
mas pra mim num deu pq eu so to usando imagems JPEG..porque usa menos espao no banco
uma imagem que eu tenhu em BMP tinha 1 mb
em JPEG - 20 kb
por isso que eu so vou usar jpeg,,,ai deu erro tbm

rogeriodilima

Posted 04 abril 2008 - 05:13

ai esse codigo ta quase certo..ta carregando as imagens do tabela..porem devo estar esquecendo de algo...pq ta criando os dbimage mas todos de
um mesmo registro....
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

10/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

oque eu tenhu que arrumar ai?

procedure TForm1.Button1Click(Sender: TObject);


var
imagem: TJvDBImage;
espaco: integer;
Begin
with IBQuery1 do
begin
close;
sql.Clear;
sql.add('select * from TB_PRODUTO');
Open;
end;
espaco:=10;
while not IBQuery1.Eof do
begin
imagem := TJvDBImage.Create(ScrollBox1);
imagem.Parent:=ScrollBox1;
imagem.DataSource:=DataSource1;
imagem.DataField:='IMAGEM_PRODUTO';
imagem.Parent :=ScrollBox1;
imagem.Width:=100;
imagem.Height:=100;
imagem.Top:=5;
imagem.Stretch:=true;
imagem.Left := espaco;
espaco:=espaco+imagem.Width+10;
IBQuery1.Next;
end;
end;

rogeriodilima

Posted 08 abril 2008 - 09:49

http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

11/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

consegui add as imagens do banco nos dbimage em tempo de execuo, porem s ta funcionando com imagens BMP mesmo esse componente
TJvDBImage permitindo gravar imagens em JPEG.
mais da pra fazer um teste eu preciso que quando dar duplo clique em um dbimage dai mostrar um caixa de mensagem mostrando o nome do
modelo..ai eu num to sabendo como passar o duplo clique como parametro..... alguem pode ajudar nisso ai ... e tbm se souber como que eu fao
pra conseguir listar as imagens no formato JPEG,,mas tem que ser com o dbimage..
mas o mais importante essa parte do parametro

procedure TForm1.FormShow(Sender: TObject);


var
imagem: TJvDBImage;
espaco: integer;
Begin
with ibqry do
begin
close;
sql.Clear;
sql.add('select CODIGO_PRODUTO, IMAGEM_PRODUTO from TB_PRODUTO');
Open;
end;
espaco:=10;
while not ibqry.Eof do
begin
imagem := TJvDBImage.Create(ScrollBox1);
imagem.Parent:=ScrollBox1;
imagem.Stretch:=true;
imagem.Picture.Assign(ibqryIMAGEM_PRODUTO);
imagem.Width:=100;
imagem.Height:=100;
imagem.Top:=10;
imagem.OnDblClick:=JvDBImage1DblClick;
imagem.Left := espaco;
espaco:=espaco+imagem.Width+10;
ibqry.Next;
end;
end;
procedure TForm1.JvDBImage1DblClick(Sender: TObject);
begin
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

12/13

9/15/2016

recuperar imagens no banco de dados - Pascal/Delphi - Frum

with IBQuery1 do
begin
close;
sql.Clear;
sql.add('select * from TB_PRODUTO');
sql.add('where codigo_produto =:parametro');
//ParamByName('parametro').............?
Open;
end;
ShowMessage(IBQuery1MODELO_PRODUTO.AsString);
end;

Rock

Posted 09 abril 2008 - 01:46

Chame o mtodo OnDblClick() passando um parametro vlido

Back to Pascal/Delphi

Frum Programao e assuntos relacionados Pascal/Delphi

http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/

13/13

Anda mungkin juga menyukai