Primeiros
passos em Kylix - Parte III
Acesso a Banco de dados
Nos artigos
anteriores desta série, mostramos como desenvolver pequenos programas com o
Kylix, mas esses programas não faziam acesso a bancos de dados, não
possibilitando o armazenamento e recuperação das informações. Neste artigo,
daremos uma introdução ao acesso a banco de dados feito com o Kylix,
permitindo que os dados de um cadastro possam ser lidos, alterados e salvos.
As partes
anteriores deste tutorial podem ser seguidas usando-se a versão open source
do Kylix, que foi distribuída na RdL 21. Esta é uma versão gratuita,
permitindo o desenvolvimento de programas sob licença GPL, porém ela não
contém a funcionalidade de acesso a banco de dados.
Para seguir
este artigo, se você não tiver a versão comercial do Kylix, você pode
baixar uma versão de demonstração, válida por 30 dias. É uma versão
completa, por prazo limitado e também está disponível no site da Borland.
Acesso a banco de dados
Com o Kylix,
a Borland disponibilizou um novo engine de acesso a banco de dados: o
dbExpress. O engine de banco de dados do Delphi, o BDE era muito grande e
complexo e era alvo de muitas críticas. Com o Kylix, os projetistas da
Borland tiveram a oportunidade de criar um novo engine, muito mais leve e
rápido, chamada dbExpress.
O acesso é
feito pelos componentes de acesso a bancos de dados, que internamente usam
uma série de funções do dbExpress que, por sua vez, utiliza-se de drivers
para acesso aos diversos bancos de dados, como mostra a Figura 1.
Figura 1 -
Acesso a banco de dados com dbExpress.
Atualmente,
existem drivers para acesso a Interbase, MySQL, Oracle e DB/2, mas já
existem drivers de terceiros para acesso à ODBC, permitindo acessar
qualquer banco ligado a ela, inclusive PostgreSQL e MS-SQL.
O acesso a
bancos de dados em linguagens tradicionais é feito por meio de APIs
(Application Programming Interface - Interface de Programação de
Aplicações), um conjunto de funções disponibilizadas pelo fabricante do
banco de dados. Munido desta interface, o desenvolvedor chama as funções
que executam determinada tarefa sobre o banco de dados. O acesso feito
desta maneira, embora muito eficiente, tem duas desvantagens:
· Limita o acesso a apenas um banco de
dados - cada fabricante disponibiliza sua API, que é incompatível com a dos
demais fabricantes.
· A programação é extremamente demorada:
a documentação é, em geral, bastante complicada e, muitas vezes, deve-se
chamar uma série de funções na seqüência para executar uma única tarefa.
O uso de um
engine de acesso uniformiza a API: a única API que deve ser aprendida é
aquela do engine - os drivers encarregam-se de fazer a interface entre o
engine e o banco de dados.
Por ser um
engine essencialmente baseado em SQL, esta versão não permite acessar
bancos de dados desktop, como Paradox ou dBase.
Outra
desvantagem deste engine é o fato de ele ser unidirecional, isto é, não se
pode navegar nos dados em todas as direções, mas apenas para a frente, como
num relatório. Adiante mostraremos as ferramentas que a Borland
disponibilizou para contornar esta limitação.
Componentes de acesso a bancos de dados
Para usar o
dbExpress, podemos usar a sua API, mas isto não é muito funcional: estamos
falando de uma ferramenta de programação visual. A Borland disponibilizou
uma série de componentes para acesso a bancos de dados que encapsulam as
funções necessárias para a recuperação das informações. Estes componentes
estão na guia dbExpress da paleta de componentes, mostrada na Figura 2.
Figura 2 - Guia
dbExpress da paleta de componentes.
O componente
TSQLConnection determina a ligação ao banco de dados. Quando você insere
este componente na Form e dá um clique duplo, é mostrada a tela de
configuração (Figura 3), onde você pode indicar os parâmetros da conexão:
tipo do banco de dados, nome do arquivo físico, entre outros.
Figura 3 - Tela
da configuração da conexão.
Uma vez
configurada a conexão, você pode colocar um componente TSQLDataset, que
representa uma tabela, consulta ou stored procedure do banco de dados. Este
componente irá fornecer os dados que serão mostrados na tela. Este
componente é unidirecional e, desta maneira, não seria possível navegar
livremente pelos dados. Para contornar esta limitação, a Borland
"emprestou" um componente de uma tecnologia de três camadas,
chamado TClientDataset. Ele é um componente muito versátil que permite
receber dados de diversos lugares, como de uma aplicação remota, de uma
tabela XML, editando os dados em memória.
O
TClientDataset permite navegação em todas as direções e soluciona o
problema da navegação unidirecional do TSQLDataset. Os dados da TSQLDataset
são transferidos, através de um provedor de dados representado por um
TdatasetProvider ao TClientDataset e a navegação e edição processa-se nele.
Quando se
quer gravar os dados no banco de dados usa-se o método ApplyUpdates e a
gravação é efetivada. A Figura 4 mostra o esquema de conexão entre os
componentes.
Figura 4 -
Esquema de conexão entre os componentes
Note que
aqui não há três camadas. Toda esta conexão se processa na aplicação. A
criação de aplicações em três camadas não está disponível na versão Kylix
Open Edition.
Para
facilitar o uso deste tipo de conexão, a Borland criou o componente
TSQLClientDataset, que encapsula os componentes TClientDataset,
TDatabaseProvider e TSQLDataset, dispensando a necessidade de configuração
dos três componentes individualmente e da conexão entre eles. Com este
componente, pode-se fazer a navegação em todas as direções, alterando os
dados, se necessário.
Além destes
componentes, a guia dbExpress contém os componentes TSQLQuery, TSQLTable e
TSQLStoredProc, que são equivalentes àqueles que fazem acesso a BDE,
criados para facilitar a transposição de aplicações criados no Delphi para
o Kylix.
Componentes Data Aware
O passo
seguinte é mostrar as informações provenientes do banco de dados e
mostrá-las ao usuário, obtendo as modificações necessárias. Uma maneira de
fazer isto é posicionar uma tabela no ponto desejado, recuperar os dados,
alimentando uma série de componentes visuais. Quando o usuário confirma as
alterações, as informações são recolhidas e transmitidas ao banco de dados.
Embora esta
maneira esteja correta, não é a ideal: o Kylix disponibiliza versões de
seus componentes ligados ao banco de dados - a recuperação e recolhimento
das informações é feita de maneira automática, sem que seja preciso
escrever código para isto. Estes componentes são chamados de componentes
Data Aware. Eles estão situados na guia DataControls da paleta de
componentes mostrada na Figura 5.
Figura 5 - Guia
Data Controls da paleta de componentes.
A ligação
entre os componentes Data Aware e o Dataset (o componente que acessa os
dados) é feita com um componente TDataSource, da guia DataAccess. Devemos
ligar o componente Data Aware ao TDataSource e, por sua vez, ligar este ao
Dataset. Esta camada extra traz a flexibilidade de se poder mudar o
componente de acesso a dados sem precisar mexer na interface visual.
Desenvolvendo uma aplicação de banco de
dados
Munidos dos
conceitos de acesso aos bancos de dados com o dbExpress, podemos criar uma
aplicação que mostra os dados de uma tabela, permitindo sua movimentação,
tanto na forma de grade como na forma de detalhe.
Crie uma
nova aplicação usando a opção de menu File -> New Application.
Na Form
principal, insira um componente TSQLConnection, da guia dbExpress, dando um
clique duplo sobre ele para abrir sua tela de configuração. Você deve ter o
Interbase instalado em sua máquina para que o programa funcione. Se não
tiver, baixe a versão free e instale-o, como foi mostrado na RdL número 11.
Na tela de configuração são mostradas todas as conexões disponíveis. Crie
uma nova, dando um clique no primeiro botão da barra de ferramenta e dê o
nome RdL para ela. Configure a propriedade DatabaseName para
/opt/interbase/examples/employee.gdb. Note que o diretório deve ser aquele
onde você instalou o Interbase, que no meu caso foi /opt/interbase. Caso
você tenha instalado o Interbase em outro local, altere o diretório de
acordo. Confirme, clicando no penúltimo botão e clique no último botão para
testar a conexão. Se tudo estiver ok, você está conectado ao banco de dados.
Feche a
janela e, no Object Inspector, configure a propriedade Login Prompt para
False e, na propriedade Params, insira as seguintes linhas:
User name=SYSDBA
Password=masterkey
Desta
maneira, quando acessar o banco de dados, não será solicitada a senha de
acesso.
Insira um
componente TSQLClientDataset e configure a propriedade DBConnection para
SQLConnection1. Configure a propriedade Command Type para ctTable e a
propriedade CommandText para BioLife. Altere a propriedade Active para True.
Insira um
componente TDatasource, configurando sua propriedade Dataset para Dataset1.
No topo da
Form insira um componente TDBNavigator, da guia DataControls. Este
componente tem botões para facilitar a navegação entre os dados. Configure
sua propriedade Datasource para Datasource1.
Insira um
componente TDBGrid e configure sua propriedade Datasource para Datasource1.
Abaixo da Grid, coloque dois componentes TDBEdit, configurando suas
propriedades Datasource para Datasource1.
Configure a
propriedade DataField do primeiro TDBEdit para First_Name e do segundo para
Last_Name. Você deve ter uma tela como a da Figura 6.
Figura 6 -
Aplicação de acesso a dados.
Note que, à
medida que você coloca os componentes na Form e configura suas
propriedades, os dados da tabela são mostrados. Como você pode ver, sem
escrever uma linha de código, o Kylix permite mostrar uma tabela, com um
campo memo e um campo gráfico, mesmo em tempo de projeto.
Se você
executar o programa, verá que é possível navegar pela tabela usando o
navigator ou selecionando um novo registro da grade.
Você pode
inclusive alterar os dados. Porém, se alterá-los, quando sair do programa e
voltar a ele, verá que as alterações não foram efetivadas no banco de
dados. Isto se deve ao fato de estarmos editando os dados na memória e não
aplicando as alterações ao banco de dados físico, uma conseqüência do uso
do TSQLClientDataset. Para aplicar as alterações ao banco de dados, você
deve colocar um botão na Form, alterando sua propriedade Caption para Salva
Dados.
Dê um clique
duplo no botão para abrir o editor de código em seu evento OnClick,
digitando o seguinte:
SQLClientDataset1.ApplyUpdates(-1);
Desta
maneira, ao clicar no botão, os dados serão gravados fisicamente. Execute a
aplicação e veja que, quando você altera os dados e clica no botão, os
dados são efetivamente gravados.
Como pudemos
ver aqui, o Kylix facilita muito o acesso a bancos de dados. Com apenas uma
linha de código, você foi capaz de criar uma aplicação que navega numa
tabela, tanto no formato de grade como de detalhe e permite alterar os
dados.
Para saber mais:
Download do
Kylix Trial e Kylix Open Source:
Download do
Interbase Open Source:
|