Nenhum comentário


FireDAC

 

A Embarcadero divulgou recente uma ótima noticia, a aquisição do AnyDAC, framework de acesso a dados. No Delphi, ele passou a ser FireDAC e esta disponível para usuários do XE3 e XE4 das versões Enterprise, Ultimate ou Architect. Para quem usa a versão Professional, pode adquirir um pacote add-on client/server.

 

FireDAC possui uma engine otimizada para acesso a dados. Além disso, existem várias funções para abstrair o servidor de banco de dados usado, assim, sua aplicação pode facilmente ser multi-banco. O servidor de banco de dados fica a cargo de sua escolha ou do seu cliente.

 

O dbExpress tinha também esse objetivo, criar aplicações multi-bancos, mas exemplos indicam que projetos que utilizam mais de um servidor de banco, usando dbExpress, não tem toda essa facilidade. FireDAC ainda tem a vantagem de acesso a banco de dados no iOS.

 

Nota: O FireDAC veio para substituir o dbExpress, mas esse continuará a ser suportado, apenas não será mais atualizado. Se suas aplicações com dbExpress (ou até mesmo BDE, que existem hoje em dia), funcionam normalmente, não há motivos para a troca. Para novos projetos, comece a utilizar o FireDAC.

 

Veja a seguir os principais bancos suportados:

·         MySQL

·         SQL Server

·         Oracle

·         InterBase

·         PostgreSQL

·         SQLite

·         Sybase SQL Anywhere

·         Access

·         DB2

·         Firebird

 

No XE4, temos acesso de banco de dados no iOS para os seguintes bancos de dados:

·         InterBase – InterBase ToGo and IBLite

·         SQLite

Instalação

O instalador é bastante simples, onde apenas temos que informar o que queremos instalar (ferramentas, exemplos, help etc), como podemos ver na Figura 1.

 

 

Figura 1. Instalação do FireDAC

 

Assim como os exemplos de conexões que vamos utilizar, ou seja, os servidores de banco de dados que queremos conectar com o FireDAC (Figura 2).

 

 

Figura 2. Escolhendo os servidores que iremos utilizar com o FireDAC

 

Após a instalação, abra o Delphi e veja que foi adicionado um novo menu (Figura 3).

 

 

Figura 3. Menu no Delphi do FireDAC

 

Através do menu, temos acesso a algumas configurações do FireDAC, como por exemplo o Explorer onde temos os arquivos de configuração de conexões aos banco de dados suportados. O Explorer é semelhante ao BDE Admin (Figura 4).

 

 

Figura 4. Ferramenta Explorer do FireDAC

 

Além disso, temos acesso ao Monitor, um trace onde podemos ver como estão as conexões usadas pela aplicação (Figura 5), ficando fácil encontrar os gargalos de performance.

 

Dica: é necessário codificar para habilitar o monitoramento do trace na aplicação.

 

 

Figura 5. Monitorando o trace da aplicação

 

Na Tool Palette temos três novas abas com os controles que poderemos usar nas aplicações com acesso a dados (Figura 6).

 

 

Figura 6. Componentes do FireDAC

Criando o primeiro exemplo

Vamos então, criar o primeiro exemplo com o FireDAC. Adicione um ADConnection e um ADQuery da aba FireDAC. Dê um duplo clique no ADConnection para abrir o editor de configuração de conexão (Figura 7).

 

 

Figura 7. Editor de conexões do ADConnection

 

No editor, escolhemos o driver que vamos usar e todas as configurações referente a conexão. Algo bem simples, para quem esta acostumado a usar BDE e dbExpress. No item Connection Definition Name escolhemos as conexões criadas na ferramenta Explorer.

 

Após, basta alterar para true a propriedade Connected para testar a conexão com o banco. No ADQuery vamos fazer a consulta para o exemplo. Note que não precisamos indicar o Connection, a propriedade Connection é preenchida automaticamente ao adicionar o componente no formulário.

 

Na propriedade SQL, digite o código da consulta (“select * from Customers”). Caso seja necessário fazer testes, verificar se estamos selecionando os dados corretos, basta dar um duplo clique no ADQuery que será aberto um editor onde podemos fazer consultas no banco, sabendo corretamente os campos retornados, parâmetros etc (Figura 8).

 

 

Figura 8. Editor de consultas do ADQuery

 

Agora, basta adicionar um DataSource, um DBGrid e fazer as conexões. Ativando o ADQuery podemos ver os dados em design-time. Executando a aplicação temos a mensagem de erro da Figura 9.

 

 

Figura 9. Mensagem de erro ao executar a aplicação

 

Essa mensagem ocorre, por que precisamos adicionar na aplicação a unit ou o componente referente ao driver utilizado (nesse caso o SQL Server). Isso ocorre por que o FireDAC não usa DLL, tudo esta no fonte da unidade, então precisamos adicionar um ADPhysMSSQLDriverLink ou colocar no uses “uADPhysMSSQL”.

Tente novamente executar e acredito que terá o erro da Figura 10.

 

 

Figura 10. Mensagem de erro

 

Esse caso é igual, basta adicionar o ADGUIxWaitCursor ou no uses “uADGUIxFormsWait”. Depois, basta executar a aplicação para visualizar o primeiro exemplo usando FireDAC (Figura 11).

 

 

Figura 11. Primeiro exemplo com FireDAC

 

Nota: a unit da solução do erro da Figura 9 dependerá do banco utilizado.

 

Na parte referente a manipulação de dados (insert, update, delete), a utilização é praticamente igual a utilizada com BDE. Temos componente para transação (ADTransaction) que deve ser configurado nas propriedades Transaction e UpdateTransaction do ADConnection.

 

Nota: Você pode usar o ADTable ou ADQuery para manipular os dados. Mas deixo a dica para usar o ADQuery, pois assim, podemos usar parâmetros, sem a necessidade de trazer todos os registros da tabela, pois vamos modificar apenas um.

 

Outros componentes

Vamos conhecer outros componentes interessantes do FireDAC.

ADScript: componente que concentra na propriedade SQLScripts vários comandos SQLs para serem usados na aplicação (Figura 12), além de podermos usar arquivos de script, usando a propriedade SQLScriptFileName.

 

 

Figura 12. SQLScripts armazenando comandos SQLs

 

Ainda temos um caixa de dialogo que mostra o que esta sendo feito na execução dos scripts (Figura 13), adicionando um ADGUIxScriptDialog e vinculando na propriedade ScriptDialog.

 

 

Figura 13. ADGUIxScriptDialog mostrando a execução dos scripts

 

ADGUIxLoginDailog: componente que mostra uma tela de login para autenticação do banco de dados. Você deve configurar o componente na propriedade LoginDialog do ADConnection, lembrando também que a propriedade LoginPrompt deve estar configurada para true.

 

ADGUIxErrorDailog: componente que mostra uma tela com o erro que a aplicação executou. Serve apenas para erros com banco de dados.

Backup: a possibilidade de realizar backup do banco esta disponível apenas para alguns servidores (que disponibilizam APIs para isso). Podemos fazer backup de bancos Interbase/Firebird usando o ADIBBackup ou ADIBNBackup.

 

Nesse caso ainda precisamos indicar o driver que usaremos (ADPhysIBDriverLink). Para realizar o backup, basta configurar as propriedades BackupFiles (indicação do arquivo de backup), Database (arquivo FDB ou IB), Host, UserName e Password.

 

Restore: semelhante ao backup, basta adicionar o ADIBRestore ou ADIBNRestore, configurar o driver e as propriedades mencionadas anteriormente. Tanto o backup como restore, possui opções para as respectivas funcionalidades.

 

dbExpress x FireDAC

Vamos fazer um pequeno comparativo, bem simples, dbExpress x FireDAC. Um comparativo que indique a melhor performance, com certeza deve usar alguma ferramenta para isso. O que vou mostrar no um exemplo, é criar uma consulta e percorrer a mesma, para indicar o tempo que esse processo levará.

 

O hardware usado, será o mesmo, então não teremos diferenças. Teremos o tempo gasto para o processamento da consulta para essa pequena comparação. A tela é bem simples, onde temos um Grid e um botão, assim como Labels para informações (Figura 14).

 

 

Figura 14. Tela para comparação entre dbExpress e FireDAC

 

Teremos uma tela para cada tecnologia (dbExpress e FireDAC), assim criamos uma conexão para o mesmo banco e mesma consulta para cada framework. Às informações na parte inferior da tela, indicam a quantidade de registros, inicio e fim do processo e o tempo gasto.

 

A consulta será feita em uma tabela com 20 campos e mais ou menos 8 mil registros. Veja na Figura 15 o resultado.

 

 

Figura 15. Resultado da comparação

 

Se você olhou somente para o campo Tempo, ficou espantado e deu a vitória ao FireDAC. Engano seu, note o campo Qtde Registros. O FireDAC, diferente do dbExpress, não retorna todos os dados da consulta, ele retornou apenas 50.

 

Para quem trabalhou com BDE, sabe no que me refiro, os dados são retornados “aos poucos”, de acordo com a necessidade do usuário (ao usar o scroll do grid, o restante dos dados é apresentado). Assim, aparentemente, os dados são mostrados instantaneamente em tela.

 

Para retornar todos os dados, precisamos acessar a propriedade FetchOptions do ADQuery. Nessas opções, temos a propriedade RowsiteSize indicando a quantidade retornada. Caso deseje, que sempre seja retornado todos os dados mude Mode para fmAll.

Ao executar a aplicação, nossa comparação é rigorosamente igual (Figura 16).

 

 

Figura 16. Resultado final da comparação

 

Nota: veja que o cálculo de tempo, não leva em conta milésimos de segundos, assim, o cálculo simples do tempo inicial e final, apresenta uma pequena diferença.

 

Como comentei, uma comparação precisa deve ser feita com ferramentas indicadas para isso, quis apenas deixar uma dica para o leitor que sempre fará a pergunta: qual o melhor? Minha resposta: aquele que você mais gosta ou se adapta.

 

Conclusões

Vimos nesse artigo como usar o FireDAC a partir de agora em suas aplicações no Delphi. Compare com o BDE e dbExpress e tire suas próprias conclusões sobre facilidades, performance etc. Um grande abraço a todos e até a próxima.