GARANTIR DESCONTO

Fórum Visualiar Imagem DBImage e Slavar no Banco de Dados #444798

05/06/2013

0

Boa Tarde Pessoal, venho aqui mais uma vez pedir a ajuda de vocês, e o seguinte:
Tenho um formulario com 1 IBDatabase, 1 IBTransaction, 1 IBtable, 1 DataSoure, fazendo ligação com minha tabela e seus componentes, 1 DBmemo, 2 Botoes, 1 OpenPicutreDialog e 1 DBImage.
O primeiro botao e para carregar a imagem e visualiza-la no DBImage, fiz com o seguinte codigo:
procedure TFRErro.Button2Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName)
end;

Esse Funcionou correto.

O segundo botão e para salvar o arquivo da imagem no Banco de Dados, e assim quando eu for mudando os resgistro vou visualizando as imagens de cada resgitro. Estva começando com o seguinte comando mas não deu:
begin
if openpicturedialog1.Execute then
begin
IBTable1.fieldbyname('IMAGEM').LoadFromFile(openpicturedialog1.FileName,ftBlob);
end;
end;

Olhei em varios foruns tentei de diversas maneiras preom sempre algum dava erro.
Alguem pode me ajudar? Desde ja fico muito agradecido.
Felipe Arruda

Felipe Arruda

Responder

Posts

05/06/2013

Claudia Nogueira

Pra gravar imagem no firebird, eu faço o seguinte.
Tenho um componente TImage (o normal, não o DBImage), aí depois de carregar a imagem nesse TImage eu gravo usando um IBDataSet1.
Exemplo:

      IBDataSet1.Close;
      IBDataSet1.SelectSQL.Clear;
      IBDataSet1.SelectSQL.Text := 'SELECT IMAGEM FROM TABELA WHERE ID = 1;
      IBDataSet1.ModifySQL.Clear;
      IBDataSet1.ModifySQL.Text := 'UPDATE TABELA SET IMAGEM =:IMAGEM WHERE ID = 1;
      IBDataSet1.Open;
      IBDataSet1.Edit;
      TblobField(IBDataSet1.FieldByName('IMAGEM')).loadfromfile(sArquivo);
      IBDataSet1.Post;
      IBDataSet1.ModifySQL.Clear;
      Transacao.CommitRetaining;
Responder

Gostei + 0

05/06/2013

Felipe Arruda

Boa Tarde Claudia, muito obrigado pela ajuda.
Ok, mas esse comando ficaria no onlcik do botão, nunca usei esse componente IBDataset, tambem porque sou novo em Delphi e Firebird e não tenho tanto conhecimento ainda, se não for pedir D+ pode comentar as linhas e exemplificar de como usar o componente.
Desdeja fico muito agradecido e bom saber que existe pessoas dispostas a ajudar como você.
Obrigado.

Att, Felipe.
Responder

Gostei + 0

05/06/2013

Felipe Arruda

o Campo IMAGEM na minha tabela TAB_ERRO, esta com tipo BLOB, nesse seu exemplo tem que ser com varchar?
Responder

Gostei + 0

05/06/2013

Claudia Nogueira

No botão pra localizar a imagem, é igual você fez:
  if OpenPictureDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);


No botão pra salvar no banco de dados:
begin
  if FileExists(OpenPictureDialog1.FileName) then //Verifica se existe o arquivo
  begin
    IBDataSet1.Close; //Fecha o dataset
    IBDataSet1.SelectSQL.Clear; //Limpa o comando sql do dataset
    IBDataSet1.SelectSQL.Text := 'SELECT IMAGEM FROM PRODUTO WHERE ID_PRODUTO = 10036'; //Faz um select trazendo apenas o registro que será alterado
    IBDataSet1.ModifySQL.Clear; //Limpa o comando sql de update
    IBDataSet1.ModifySQL.Text := 'UPDATE PRODUTO SET IMAGEM =:IMAGEM WHERE ID_PRODUTO = 10036'; //Preenche o comando com o update na tabela
    IBDataSet1.Open; //Abre o dataset
    IBDataSet1.Edit; //Edita o dataset
    TblobField(IBDataSet1.FieldByName('IMAGEM')).loadfromfile(OpenPictureDialog1.FileName); //Passa a imagem para a edição
    IBDataSet1.Post; //Grava o dataset
    IBDataSet1.ModifySQL.Clear; //Limpa os comandos
    Transacao.CommitRetaining; //Commita a transação
  end;
end;
Responder

Gostei + 0

05/06/2013

Felipe Arruda

Tenho que declarar alguma variavel para transacao?
Responder

Gostei + 0

05/06/2013

Claudia Nogueira

Ele é o componente TIBTransaction que eu coloquei o nome Transacao.
Tenho que declarar alguma variavel para transacao?
Responder

Gostei + 0

05/06/2013

Felipe Arruda

Boa Noite, o que estou fazendo de errado?

unit uniterro;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, DBCtrls, DB,
IBCustomDataSet, IBTable, IBDatabase, Mask, FileCtrl, Jpeg, GIFImg, ExtDlgs, clipbrd;

type
TFRErro = class(TForm)
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
BitBtn8: TBitBtn;
MainMenu1: TMainMenu;
A1: TMenuItem;
NovoCadastro1: TMenuItem;
SalvarCliente1: TMenuItem;
Desfazer1: TMenuItem;
ExcluirNovoCadastro1: TMenuItem;
ProximoCliente1: TMenuItem;
ClienteAnterior1: TMenuItem;
N1: TMenuItem;
Sair1: TMenuItem;
Procurar1: TMenuItem;
Relatrio1: TMenuItem;
Clie1: TMenuItem;
Label12: TLabel;
Label14: TLabel;
DBMemo2: TDBMemo;
DBMemo1: TDBMemo;
Label1: TLabel;
DBMemo3: TDBMemo;
Label2: TLabel;
DBMemo4: TDBMemo;
DBNavigator1: TDBNavigator;
IBTransaction1: TIBTransaction;
IBDatabase1: TIBDatabase;
IBTable1: TIBTable;
DataSource1: TDataSource;
DBGrid2: TDBGrid;
Label3: TLabel;
DBEdit1: TDBEdit;
Button1: TButton;
OpenDialog1: TOpenDialog;
Label4: TLabel;
DBMemo5: TDBMemo;
OpenPictureDialog1: TOpenPictureDialog;
Button2: TButton;
Button3: TButton;
Image1: TImage;
IBDataSet1: TIBDataSet;
procedure BitBtn8Click(Sender: TObject);
procedure Sair1Click(Sender: TObject);
procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid2KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn1Click(Sender: TObject);
procedure NovoCadastro1Click(Sender: TObject);
procedure SalvarCliente1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Desfazer1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure ExcluirNovoCadastro1Click(Sender: TObject);
procedure ClienteAnterior1Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure ProximoCliente1Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure DBGrid2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DBGrid2TitleClick(Column: TColumn);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FRErro: TFRErro;

implementation

{$R *.dfm}

procedure TFRErro.BitBtn1Click(Sender: TObject);
var
NOVO: integer;

begin
IBTable1.Last;
NOVO:=IBTable1.FieldByName ('CODIGO').AsInteger+1;
IBTable1.Append;
IBTable1.FieldByName('CODIGO').AsInteger:=NOVO;
DBMemo1.SetFocus;

end;

procedure TFRErro.BitBtn2Click(Sender: TObject);
var
NOVO : integer;
begin
IBTable1.Post;
ShowMessage ('Novo Erro Cadastrado com Sucesso.');

end;

procedure TFRErro.BitBtn3Click(Sender: TObject);
begin
IBTable1.Cancel;
ShowMessage ('Cadastro de Novo Erro cancelado.');

end;

procedure TFRErro.BitBtn4Click(Sender: TObject);
begin
If Application.MessageBox('Confirma Exclusão ?','Cuidado !!!',MB_YESNO +
MB_ICONQUESTION + MB_DEFBUTTON2) = IDYES Then
IBTable1.Delete;
end;

procedure TFRErro.BitBtn6Click(Sender: TObject);
begin
IBTable1.Prior;
end;

procedure TFRErro.BitBtn7Click(Sender: TObject);
begin
IBTable1.Next;
end;
procedure TFRErro.BitBtn8Click(Sender: TObject);
begin
Close;
end;

procedure TFRErro.Button1Click(Sender: TObject);
begin
DataSource1.DataSet.Close;
DBGrid2.DataSource.DataSet.Filtered := False;
DataSource1.DataSet.Open;
end;


procedure TFRErro.Button2Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

procedure TFRErro.Button3Click(Sender: TObject);

begin
if FileExists(OpenPictureDialog1.FileName) then //Verifica se existe o arquivo
begin
IBDataSet1.Close; //Fecha o dataset
IBDataSet1.SelectSQL.Clear; //Limpa o comando sql do dataset
IBDataSet1.SelectSQL.Text := 'SELECT TAB_ERRO FROM IMAGEM WHERE CODIGO = 10036'; //Faz um select trazendo apenas o registro que será alterado
IBDataSet1.ModifySQL.Clear; //Limpa o comando sql de update
IBDataSet1.ModifySQL.Text := 'UPDATE IMAGEM SET IMAGEM =:IMAGEM WHERE CODIGO = 10036'; //Preenche o comando com o update na tabela
IBDataSet1.Open; //Abre o dataset
IBDataSet1.Edit; //Edita o dataset
TblobField(IBDataSet1.FieldByName('IMAGEM')).loadfromfile(OpenPictureDialog1.FileName); //Passa a imagem para a edição
IBDataSet1.Post; //Grava o dataset
IBDataSet1.ModifySQL.Clear; //Limpa os comandos
IBTransaction1.CommitRetaining; //Commita a transação
end;
end;

O nome da minha tabela e TAB_ERRO com os campos Codigo/Erro/Problema/Solucao/Observação/Imagem

tem como me ajudar?
Obrigado.
Responder

Gostei + 0

17/06/2013

Felipe Arruda

Boa Tarde pessoal, fiz dessa maneira, usei os componentes Image e OpenDialogPicture.

Criei um botão localizar imagem:
procedure TFRErro.Button2Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
   Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

procedure TFRErro.Button3Click(Sender: TObject);
var
  MemoryStream : TMemoryStream;
  Jpg : TJpegImage;
begin
 try
   Jpg := TJpegImage.Create;
   MemoryStream := TMemoryStream.Create;
  Jpg.LoadFromFile(OpenPictureDialog1.FileName);
  Jpg.SaveToStream(MemoryStream);
  MemoryStream.Position := 0;
  IBtable1.Edit;
  (Ibtable1.FieldByName('Imagem') as TBlobField).BlobType := ftTypedBinary;
  (Ibtable1.FieldByName('Imagem') as TBlobField).LoadFromStream(MemoryStream);
  IBtable1.Post;
  IBTransaction1.CommitRetaining;
 finally
  MemoryStream.Free;
 Jpg.Free;
end;
end;


Criei um botao gravar imagem:

procedure TFRErro.Button3Click(Sender: TObject);
var
  MemoryStream : TMemoryStream;
  Jpg : TJpegImage;
begin
 try
   Jpg := TJpegImage.Create;
   MemoryStream := TMemoryStream.Create;
  Jpg.LoadFromFile(OpenPictureDialog1.FileName);
  Jpg.SaveToStream(MemoryStream);
  MemoryStream.Position := 0;
  IBtable1.Edit;
  (Ibtable1.FieldByName('Imagem') as TBlobField).BlobType := ftTypedBinary;

Criei um botaõ mostrar imagem:

var
  MemoryStream : TMemoryStream;
  Jpg : TJpegImage;
begin
  if not((Ibtable1.FieldByName('Imagem') as TBlobField).IsNull) then
  begin
    try
      MemoryStream := TMemoryStream.Create;
      Jpg := TJpegImage.Create;
      (Ibtable1.FieldByName('Imagem') as TBlobField).SaveToStream(MemoryStream);
      MemoryStream.Position := 0;
      Jpg.LoadFromStream(MemoryStream);
      Image1.Picture.Assign(Jpg);
    finally
      Jpg.Free;
      MemoryStream.Free;
    end;
  end
  else
    Image1.Picture := nil; // caso não haja imagem, a Image1 não é carregada
end;
  (Ibtable1.FieldByName('Imagem') as TBlobField).LoadFromStream(MemoryStream);
  IBtable1.Post;
  IBTransaction1.CommitRetaining;
 finally
  MemoryStream.Free;
 Jpg.Free;
end;
end;

Responder

Gostei + 0

02/09/2014

Jeferson Machia

Reabrindo.
Eu criei da seguinte forma: Estou usando MYSQL e só tem o caminho, a imagem fica guardada em uma pasta imagens dentro do sistema, tendo uma query e um dataset e a grid ligada nele, você pode trabalhar com variável que dá certo, Crie uma variável e nela guarda o resultado do banco de dados, depois use assim Image1.Picture.LoadFromFile(sua variável); Pode tentar colocar no DrawColumnCell da grid que acho que dá certo, caso não der pode usar um botão para carregar a imagem ou mesmo usar o ID do seu banco para consultar e carregar a imagem de acordo com o número do seu ID, pode colocar no evento ON Click do seu DBGrid que ao clicar carrega a imagem. Espero que possa ajudar outras pessoas. Valeu.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar