Fórum Visualiar Imagem DBImage e Slavar no Banco de Dados #444798
05/06/2013
0
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
Curtir tópico
+ 0Posts
05/06/2013
Claudia Nogueira
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;
Gostei + 0
05/06/2013
Felipe Arruda
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.
Gostei + 0
05/06/2013
Felipe Arruda
Gostei + 0
05/06/2013
Claudia Nogueira
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;
Gostei + 0
05/06/2013
Felipe Arruda
Gostei + 0
05/06/2013
Claudia Nogueira
Gostei + 0
05/06/2013
Felipe Arruda
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.
Gostei + 0
17/06/2013
Felipe Arruda
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;
Gostei + 0
02/09/2014
Jeferson Machia
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)