Você está na página 1de 6

ETEC DR.

EMLIO HENRNANDEZ AGUILAR


PROGRAMAO DE COMPUTADORES I
PROFESSOR RAFAEL BARRETO
DELPHI - UTILIZANDO OPENDIALOG PARA ARMAZENAR IMAGENS EM BANCO DE DADOS
Criaremos uma soluo simples para criar banco de dados que armazene endereo de
uma imagem e faa sua exibio no Delphi. Para este exemplo, armazenaremos informaes
de Bandas de Rock.
Iniciamos a criao de um banco de dados simples, chamado BD_BANDAS, com apenas
uma tabela para armazenar os dados (salva como TB_BANDAS).
Os campos da tabela TB_BANDAS sero:
NOME: Para armazenar o nome da banda VARCHAR(100)
FORMACAO: Para armazenar o ms e ano de formao da banda VARCHAR(7)
VOCALISTA: O nome do cantor da banda VARCHAR(50)
SITE: O endereo eletrnico (site) da banda VARCHAR(200)
PAIS: Pas de origem da banda VARCHAR(50)
FOTO: Para armazenar o caminho da foto (e no a imagem) VARCHAR(200)
ULTIMO_ALBUM: Nome do ltimo lbum lanado VARCHAR(250)
PRECO: Valor deste ltimo lbum - SMALLMONEY
OBS: No use espaos ou acentos nos nomes dos campos, tabela, ou banco.
Faa a conexo via ODBC:

Em Painel de Controle, Ferramentas Administrativas, Fontes de Dados ODBC;


Fontes de Dados do Sistema, Adicionar, SQL Server;
Nome de referncia BANDAS, Servidor (Neste caso, escolha o seu computador) onde o
SQL Server est instalado;
Autenticao Windows;
Alterar o Banco de Dados padro para BD_BANDAS;
Teste a conexo e conclua se estiver tudo correto.

Crie uma pasta para salvar o projeto (sugesto PROJETO_BANDAS) preferencialmente no


Disco Local C, para evitar conflitos caso queira abrir o mesmo em outro computador.
No Delphi, crie um novo projeto e salve logo no incio para evitar problemas com nomes
de objetos no futuro. Utilize o boto Save All:

Salve na pasta PROJETO_BANDAS;


O formulrio (Unit1.pas) salve como U_CADBANDAS
O projeto (Project1.dpr) salve como P_BANDAS
Altere o Caption do formulrio como desejar e a proriedade Name para FRM_CADBANDAS;
Faa a conexo com o Banco de Dados BD_BANDAS:

Adicione um novo Data Module (File, New, Data Module);


Altere a propriedade Name para DM_BANDAS e salve como U_DMBANDAS.pas
V para a paleta BDE e adicione uma Table (Mude a propriedade name para
TB_CADBANDA, em DatabaseName selecione o ODBCO criado, neste caso BANDAS,
em TableName, escolha a tabela correspondente, neste caso dbo.TB_BANDAS e
finalmente mude a propriedade Active para True)
Clique no objeto TB_CAD BANDA com o boto direito do mouse e escolha Fields Editor
e na janela que se abrir, novamente boto direito, Add Fileds, OK
Arraste os campos para o formulrio de cadastro e responda Yes para que o Delphi
automaticamente declare o Data Module na clusula Uses do formulrio de cadastro
V para a Paleta Data Access e adicione um Data Source (Mude a propriedade name
para DS_CADBANDA, a propriedade DataSet para TB_CADBANDA)
Agora na Paleta Data Controls vamos adicionar um DB Navigator (Mude a propriedade
name
para
DBN_Cad
e
configure
a
propriedade
DataSourde
DM_BANDAS.DS_CADBANDA)

Com a conexo configurada, redimensione os campos no formulrio como desejar e vamos


aos novos objetos.
Clique na paleta Additional e coloque os objetos BitBtn e Image. Mude as propriedades
conforme solicitao a seguir:
BitBtn:
Name BTN_FOTO
Caption &Carregar Foto
Glyph Coloque um cone de uma Lupa (OBS. A imagem deve ser do tipo bitmap,
extenso .bmp)
Image:
Name IMG_FOTO
Stretch True

Picture (Opcional) Crie uma imagem e adicione a esta propriedade, para evitar um erro
no Delphi gerado quando esta propriedade est vazia, sem uma imagem padro (OBS. A
imagem deve ser do tipo foto, extenso .jpg).
OBS: A prpriedade Stretch faz com que o tamanho do objeto Image no seja alterado de
acordo com o tamanho da imagem, mas sim o contrrio. O objeto ter tamanho fixo e as
imagens que vo aumentar ou diminuir para se adaptar ao tamanho do objeto Image
Altere livremente as labels para que no fiquem como nos campos das tabelas, ou seja,
sem espaos ou acentos, deixando a apresentao do formulrio mais amigvel ao usurio.
Aps todas as etapas anteriores, seu formulrio dever ter aparncia semelhante a esta:

Agora faremos com que o objeto IMG_FOTO mostre uma imagem que ser carregada
de uma pasta, criada dentro da nossa pasta do projeto.
Para carregar esta imagem, ser necessrio passar para a IMG_FOTO o endereo da
imagem, ou seja, seu caminho completo, que ser capturado da Edit criada para as fotos,
armazenado em uma varivel e repassado a nossa IMG_FOTO atravs da propriedade Picture.
Para facilitar a vida do usurio, faremos com que este endereo seja fornecido atravs
de uma janela do Windows. Esta janela a mesma utilizada por qualquer aplicao para a
abertura de arquivos e seu nome Open Dialog.

Para acion-la, clique na paleta Dialogs e escolha o objeto OpenDialog. Altere a


propriedade Name para OD_FOTO.
Para que este componente funcione, voc dever ir at a clusula Uses da unit de
cadastro e acrescentar o parmetro shellapi. Este parmetro o comando que aciona a
biblioteca de abertura de arquivos do Windows.
Vamos criar tambm uma varivel chamada FOTO, do tipo String.
Agora basta verificar qual foi o nome dado a sua Edit para foto. Para evitar alteraes
por digitao, vamos mudar a propriedade Enabled desta Edit para False (Neste exemplo a Edit
se chama DBEdit6). Finalmente vamos adicionar ao boto carregar foto o seguinte comando:
beep;
if MessageBox (Handle,'Deseja abrir uma imagem?','Imagem', mb_yesno + mb_iconquestion +
mb_defbutton2) = idyes then
begin
DBEdit6.Enabled:=True;
OD_FOTO.Execute;
DBEdit6.Text:=OD_FOTO.FileName;
FOTO:=DBEdit6.Text;
IMG_FOTO.Picture.LoadFromFile(FOTO);
DBEdit6.Enabled:=FALSE;
end;
Onde:
Beep um comando para emitir um som do Windows;
Foi criada uma caixa de mensagem para verificar se h realmente a inteno de adicionar a
foto;
Se verdade, mudamos a propriedade Enabled da DBEdit6 (a da foto) para true;
Executamos a instruo que chama a janela do Windows com OD_FOTO.Execute;
Capturamos o caminho da foto com DBEdit6.Text:=OD_FOTO.FileName;

Jogamos este caminho na varivel FOTO com FOTO:=DBEdit6.Text;


Carregamos a foto na IMG_FOTO com IMG_FOTO.Picture.LoadFromFile(FOTO);
Deixamos a propriedade Enabled da DBEdit6 como false para evitar alterao por digitao.
Neste ponto, temos a captura da imagem funcionando corretamente, mas ao navegar pelos
registros, a imagem no atualizada.
Para solucionar este problema, acessaremos o evento OnChange da nossa Edit que armazena o
endereo das imagens (DBEdit6) e incluiremos o cdigo a seguir:
procedure TFRM_CADBANDAS.DBEdit6Change(Sender: TObject);
begin
FOTO:=DBEdit6.Text;
if FOTO='' then
begin
FOTO:='C:\PCI_PROJETO_BANDAS\PADRAO.JPG';
end;

IMG_FOTO.Picture.LoadFromFile(FOTO);
end;
Onde:
Jogamos o caminho da foto na varivel FOTO com FOTO:=DBEdit6.Text;
Verificamos se este caminho est vazio com if FOTO='' then
Se estiver vazio, atribumos o endereo da imagem padro com
FOTO:='C:\PCI_PROJETO_BANDAS\PADRAO.JPG';
Mostramos a imagem capturada ou a imagem padro com
IMG_FOTO.Picture.LoadFromFile(FOTO);

CONSIDERAES FINAIS:
Esta rotina foi criada utilizando a ferramenta de navegao padro do Delphi (DBNavigator).
Para melhorar o aspecto visual deste trabalho e torn-lo mais amigvel ao usurio devemos
criar botes de navegao personalizados e eliminar o DBNavigator.
Estes trabalhos sero explorados nas prximas aulas.

Você também pode gostar