colocando imagem no banco de dados firebird
Bom dia Pessoal, estou precisando de uma força aqui.
estou precisando de um campo imagem no banco de dados. trabalho com firebird 2.1.
preciso gravar foto dentro do banco. tenho um campo. tipo memo aonde coloco a descrição da foto
e um campo blob aonde quero armazer as fotos. coloquei no formulario, alguns componentes da paleta
win.3.1 . directory e o file list box para capturar as imagens . coloquei um memo e um dbimagem no formulario
. uso os botões para novo, salvar, editar, cancelar e excluir. porem faço isto em outros formularios que não tem campo imagem. e da certo, porem neste não está dando certo. pois não sei como colocar pór exemplo.
procedure Tfrm_imagem.Mostrar;
begin
memo1.Text :=tbl_imagem.fieldbyname('texto').AsString; // este aqui passa na compilação
image1.Picture :=tbl_imagem.fieldbyname('imagem').Asstring; // este não passa.por causa do asstring , diz que é incompatível com picture, sim concordo, mais não sei o que colocar aqui.
end; procedure Tfrm_imagem.salvar;
begin
tbl_imagem.fieldbyname('texto').AsString := memo1.text;
tbl_imagem.fieldbyname('imagem').AsString := dbimage1.Picture; nos formulario comuns uso no botão salvar no onclic. o procedimento begin salvar; end; se puderem ajudar agradeço geraldo leal
begin
memo1.Text :=tbl_imagem.fieldbyname('texto').AsString; // este aqui passa na compilação
image1.Picture :=tbl_imagem.fieldbyname('imagem').Asstring; // este não passa.por causa do asstring , diz que é incompatível com picture, sim concordo, mais não sei o que colocar aqui.
end; procedure Tfrm_imagem.salvar;
begin
tbl_imagem.fieldbyname('texto').AsString := memo1.text;
tbl_imagem.fieldbyname('imagem').AsString := dbimage1.Picture; nos formulario comuns uso no botão salvar no onclic. o procedimento begin salvar; end; se puderem ajudar agradeço geraldo leal
Geraldo Leal
Curtidas 0
Respostas
Deivison Melo
08/09/2010
Geraldo,
----------------------------------------------------------------------------------------------------------------------------------------
Usando os componentes IBX (mas pode ser adaptado para outro component):
var
q : tibquery;
begin
if openpicturedialog1.Execute then
begin
q := tibquery.create(nil);
q.Database := datamodule.bancodedados;
q.SQL.Text := ‘insert into fotos (foto) values (:foto)’;
q.ParamByName(‘foto’).LoadFromFile(openpicturedialog1.FileName,ftBlob);
q.ExecSQL;
q.free;
end;
end; ---------------------------------------------------------------------------------------------------------------------------------------- Verifica se esses links também ajudam: http://www.ramosdainformatica.com.br/art_recentes01.php?CDA=922 http://www.activedelphi.com.br/forum/viewtopic.php?t=50025&highlight=cantu http://www.etaj.com.br/~jmoreira/projetos/sites/Schmidt/DBFree.pdf http://www.firebase.com.br/fb/artigo.php?id=286 Qualquer coisa estou à disposição!!! Atenciosamente, Emanoel Deivison Recife - PE
q : tibquery;
begin
if openpicturedialog1.Execute then
begin
q := tibquery.create(nil);
q.Database := datamodule.bancodedados;
q.SQL.Text := ‘insert into fotos (foto) values (:foto)’;
q.ParamByName(‘foto’).LoadFromFile(openpicturedialog1.FileName,ftBlob);
q.ExecSQL;
q.free;
end;
end; ---------------------------------------------------------------------------------------------------------------------------------------- Verifica se esses links também ajudam: http://www.ramosdainformatica.com.br/art_recentes01.php?CDA=922 http://www.activedelphi.com.br/forum/viewtopic.php?t=50025&highlight=cantu http://www.etaj.com.br/~jmoreira/projetos/sites/Schmidt/DBFree.pdf http://www.firebase.com.br/fb/artigo.php?id=286 Qualquer coisa estou à disposição!!! Atenciosamente, Emanoel Deivison Recife - PE
GOSTEI 0
Eriley Barbosa
08/09/2010
Você pode usar o componente EDBImage:
Para mostrar:
if not tbl_imagem.fieldbyname('imagem').IsNull then
EDBImage1.Picture.LoadFromFile(tbl_imagem.fieldbyname('imagem').Value);
Para gravar:
Utilize o componente OpenPictureDialog da palheta Dialogs:
if openpicturedialog1.Execute then
begin tbl_imagem.fieldbyname('imagem').LoadFromFile(openpicturedialog1.FileName,ftBlob); Este componente suporta tanto jpg como bmp e funciona apenas com o método loadfromfile, tanto para gravar como para ler. Se quiser fazer na unha, veja este link: http://www.firebase.com.br/fb/artigo.php?id=286
begin tbl_imagem.fieldbyname('imagem').LoadFromFile(openpicturedialog1.FileName,ftBlob); Este componente suporta tanto jpg como bmp e funciona apenas com o método loadfromfile, tanto para gravar como para ler. Se quiser fazer na unha, veja este link: http://www.firebase.com.br/fb/artigo.php?id=286
GOSTEI 0
Geraldo Leal
08/09/2010
Boa noite Eriley, tentei do seu jeito mais deu um erro .
tbl_imagem.fieldbyname('imagem').LoadFromFile(openpicturedialog1.FileName,ftBlob);
loadfromfile não declarado. tenho declarado na uses, jpeg, grafics.
obrigado pela ajuda ai.
sucesso
geraldo leal
GOSTEI 0
Eriley Barbosa
08/09/2010
Se o campo que armazena imagem é do tipo Blob tem que funcionar, veja este link que respondi abaixo:
Deplhi
Deplhi
GOSTEI 0
Eriley Barbosa
08/09/2010
Veja se você tem a unit DB declarada no Uses.
GOSTEI 0
Geraldo Leal
08/09/2010
Eriley, boa tarde , tenho tentado várias maneiras
mais não estou achando a o geito. Veja bem.
na minha aplicação, quando uso o o componente da palheta dialogs, dá pau, não sei o motivo,
creio que por outros componentes que uso e não combina.
então uso o componente da win.3.1 .
primeiro uso
drive combobox. para escolher o driver
segundo
directory listbox. para localizar o caminho da imagem.
terceiro
um file listbox para mostrar as imagens dentro da pasta.
um botão
No on click dele uso o seguinte codigo
procedure Tfrm_foto.SpeedButton1Click(Sender: TObject);
begin
frm_foto.dbimage1.Picture.LoadFromFile(flb_papelparede.FileName);
iniconf.WriteString('papel de parede','figura',flb_papelparede.FileName);
iniconf.WriteString('papel de parede','tipo',combobox1.text); end. até aqui tudo certo o problema é daqui para baixo tenho um dbimage no formulario, escolho a foto pelo caminho e jogo no dbimagem. o problema é na hora de salvar. e mostrar. no formulario, tenho. um memo - // para escrever os comentarios sobre a foto um dbimagem - // para mostrar a foto e pegar para gravar no banco botão salvar botão novo - botão editar botão excluir botão cancelar. e quatro botões para navegar. primeiro - tbl_imagem.First; proximo - tbl_imagem.Next; anterior -tbl_imagem.Prior; ultimo -tbl_imagem.Last; se puder colocar para mim o que fazer nestes botões. agradeço sucesso geraldo leal
iniconf.WriteString('papel de parede','figura',flb_papelparede.FileName);
iniconf.WriteString('papel de parede','tipo',combobox1.text); end. até aqui tudo certo o problema é daqui para baixo tenho um dbimage no formulario, escolho a foto pelo caminho e jogo no dbimagem. o problema é na hora de salvar. e mostrar. no formulario, tenho. um memo - // para escrever os comentarios sobre a foto um dbimagem - // para mostrar a foto e pegar para gravar no banco botão salvar botão novo - botão editar botão excluir botão cancelar. e quatro botões para navegar. primeiro - tbl_imagem.First; proximo - tbl_imagem.Next; anterior -tbl_imagem.Prior; ultimo -tbl_imagem.Last; se puder colocar para mim o que fazer nestes botões. agradeço sucesso geraldo leal
GOSTEI 0
Eriley Barbosa
08/09/2010
Declare jpeg, clipbrd no Uses.
Coloque um radiogroup da palheta standard no formulário.
No seu caption digite Formato da imagem
no ItemIndex digite 1
Na sua propriedade items, digite:
BMP
JPG E modifique seu código do botão que carrega a foto para : procedure Tfrm_foto.SpeedButton1Click(Sender: TObject); var
jpg: Tjpegimage; begin if tbl_imagem.State in [dsEdit, dsInsert] then
begin
if radiogroup1.ItemIndex = 1 then //É jpg
begin
jpg:= Tjpegimage.Create;
jpg.LoadFromFile(flb_papelparede.FileName);
Clipboard.Assign(jpg);
Dbimage1.PasteFromClipboard;
jpg.Free;
end
else
tbl_imagem.FieldByName('NamedoSeuCampoFoto').LoadFromFile(flb_papelparede.FileName); iniconf.WriteString('papel de parede','figura',flb_papelparede.FileName);
iniconf.WriteString('papel de parede','tipo',combobox1.text); end
else
ShowMessage('Edite o registro ou insira um novo'); end; Novo : tbl_imagem.Append; Salvar: tbl_imagem.Post; Editar: tbl_imagem.Edit; Cancelar: tbl_imagem.Cancel; Excluir: tbl_imagem.delete; Não utilize o memo, utilize o dbMemo.
JPG E modifique seu código do botão que carrega a foto para : procedure Tfrm_foto.SpeedButton1Click(Sender: TObject); var
jpg: Tjpegimage; begin if tbl_imagem.State in [dsEdit, dsInsert] then
begin
if radiogroup1.ItemIndex = 1 then //É jpg
begin
jpg:= Tjpegimage.Create;
jpg.LoadFromFile(flb_papelparede.FileName);
Clipboard.Assign(jpg);
Dbimage1.PasteFromClipboard;
jpg.Free;
end
else
tbl_imagem.FieldByName('NamedoSeuCampoFoto').LoadFromFile(flb_papelparede.FileName); iniconf.WriteString('papel de parede','figura',flb_papelparede.FileName);
iniconf.WriteString('papel de parede','tipo',combobox1.text); end
else
ShowMessage('Edite o registro ou insira um novo'); end; Novo : tbl_imagem.Append; Salvar: tbl_imagem.Post; Editar: tbl_imagem.Edit; Cancelar: tbl_imagem.Cancel; Excluir: tbl_imagem.delete; Não utilize o memo, utilize o dbMemo.
GOSTEI 0
Geraldo Leal
08/09/2010
olá pessoal, tentei de várias maneiras e não consegui fazer, para colocar no banco de dados
então resolvi de outra maneira, que ficou bem legal eu achei, coloquei um form e coloquei várias componentes
notebook da plheta win3.1 coloquei um imagem em cada um e os links para acessar cada imagem, no total
coloquei 60 imagens, funcionou para mim, pois as imagens são fixas para o que quero. não ficam soltas e ficou pequeno em jpg. fica ai para alguém que precisar fazer. da mesma forma. obrigado pela colaboração de todos.
sucesso a todos
geraldo leal
GOSTEI 0