colocando imagem no banco de dados firebird

Delphi

08/09/2010

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

 
Geraldo Leal

Geraldo Leal

Curtidas 0

Respostas

Deivison Melo

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
GOSTEI 0
Eriley Barbosa

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  
GOSTEI 0
Geraldo Leal

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

Eriley Barbosa

08/09/2010

Se o campo que armazena imagem é do tipo Blob tem que funcionar, veja este link que respondi abaixo:
Deplhi
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

08/09/2010

Veja se você tem a unit DB declarada no Uses.
GOSTEI 0
Geraldo Leal

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
 
GOSTEI 0
Eriley Barbosa

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.    
GOSTEI 0
Geraldo Leal

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
POSTAR