Sign In
Create Account
Pascal/Delphi
BemvindoUnidev
Registreparateracessoatodososrecursosdosite.Umavezregistradoelogado,vocpodercriartpicos,postaremtpicosjexistentes,gerenciarseuperfil
emuitomais.Sevocjtemumaconta,faa login aquiouentocrie aqui uma contaagoramesmo!
rogeriodilima
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
Rock
rogeriodilima
2/13
9/15/2016
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
Muda o self do Create para o nome do scrollbox e adiciona um Imagem.Parent := ScrollBox1 s para garantia
rogeriodilima
Rock
rogeriodilima
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
rogeriodilima
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
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?
4/13
9/15/2016
e a outra
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/
5/13
9/15/2016
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
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
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
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
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
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
end;
end;
Rock
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)
rogeriodilima
rogeriodilima
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
rogeriodilima
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/
11/13
9/15/2016
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
12/13
9/15/2016
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
Back to Pascal/Delphi
http://www.unidev.com.br/index.php?/topic/40150-recuperar-imagens-no-banco-de-dados/
13/13