Sempre me perguntei como minhas aplicações Android desenvolvidas com Delphi XE7 poderiam acessar diretamente um banco de dados hospedado.
Pois bem, esta semana recebi uma DM no Twitter da DevArt. Eles me convidavam para estudar e comentar a sua suite de componentes de acesso a dados, o UniDAC (Universal Data Access Components). Obviamente pelo que os componentes propõem, aceitei de primeira, afinal pode ser a solução para a questão que citei acima.
O que é o UniDAC?
O UniDAC é uma solução multi-plataforma para o desenvolvimento de aplicações usando vários IDEs: do RAD Studio, Delphi, C ++ Builder, Lazarus (e FPC) no Windows, Mac OS X, iOS, Android além de Linux e FreeBSD.
Trata-se de uma suíte de componentes que prover banco de dados, suportando alguns dos principais SGBDs (Sistemas de Gerenciamento de Banco de Dados) conhecidos no mercado atual como: MySQL, MS SQL SERVER, Oracle, InterBase, Firebird, PostgreSQL, SQLite, DB2, Microsoft Access, além de outros banco que podem ser acessados através de ODBC.
Como o UniDAC lida com o acesso a dados?
Alguns banco de dados são acessados diretamente, sem a necessidade da biblioteca cliente. De maneira simplificada seria você não precisar distribuir a DLL do banco junto com sua aplicação para que a mesma consiga fazer acesso à base de dados.
Atualmente o UniDAC permite que sua aplicação Mobile ou Desktop possa trabalhar com Oracle, SQL Server, MySQL, PostgreSQL, SQLite, e NexusDB diretamente sem necessidade de biblioteca cliente do BD.
Um banco de dados MySQL para teste
Para iniciarmos os testes, eu resolvi disponibilizar um banco de dados MySQL de exemplo hospedado em um provedor de internet e as credenciais de acesso serão passadas em nossa conexão mais adiante.
Conhecendo a Suite UniDAC
Para conhecer um pouco mais sobre os componentes que compõem a suíte do UniDAC clique aqui.
Basicamente, no nosso exemplo vamos fazer uma aplicação multi dispositivo que irá acessar nosso banco de dados MySQL hospedado num dado provedor de hospedagem. Por ser algo bem simples e apenas para fins de teste vamos abordar apenas 3 componentes:
TUniConnection permite configurar e gerenciar a conexão com os diversos SGBDs suportados.
TUniQuery permite a utilização de instruções SQL para recuperação, atualização e inserção dados nas tabelas.
TUniProvider componente base para as ligações entre a aplicação e o SGBD. No nosso caso TMySQLUniProvider.
Hora de colocarmos a mão na massa
Bem vamos iniciar o Delphi XE7, e criar um nova aplicação Multi Device em branco. Nela vamos inserir os componentes da suíte UniDAC retratados acima, e mais 1 Image, 1 ListView e 1Button, e configurá-los como segue:
- Image1
- Align -> Top
- WrapMode -> Stretch
- MultiResBitmap -> adicione um imagem a seu gosto.
- Button1
- Align -> Botton
- Text -> ‘Conectar MySQL’
- ListView1
- Align -> Client
Ao final do deste processo sua tela terá uma aparência semelhante à imagem abaixo:
E como configurar a suíte UniDAC
Até agora apenas colocamos na aplicação os componentes e como seria a configuração dos mesmos? Será complexo??? Bem já adianto que tudo é muito intuitivo, mas nada melhor do que conferir. Vamos lá!
No nosso componente UniConnection1 vamos alterar as propriedades como segue:
- ProviderName -> MySQL
- Porta -> 3306
- LoginPrompt -> False
- Server -> vivaitaocara.com.br
- UserName -> vivai026_exemplo
- Password -> exemplo
Com essas informações já estamos credenciados a acessar o servidor do MySQL hospedado no provedor, vamos então definir qual banco de dados acessar através da propriedade Database. Ao clicar no seletor a conexão será ativada e o banco de dados vivai026_bdexemplo estará disponível selecione-o.
Este processo também pode ser efetuado através do Connection Editor que pode ser acionado clicando com o botão direto no mouse sobre o componente UniConnection e selecionando esta opção. Veja na imagem que um Wizard é aberto para alterações por telas mais amigáveis.
Nota: Desconecte a aplicação alterando a propriedade Connected do UniConnection1 para False. Pois ao selecionar o banco de dados a aplicação se conecta ao servidor e retorna as opções disponíveis, entretanto a conexão permanece ativa impossibilitando que o componente UniQuery1 possa ser testado.
Para nosso componente UniQuery1 vamos configurar as seguintes propriedades:
- Connection -> UniConnection1
- SQL –> ‘select * from medicamentos’
Porém ao clicar sobre o botão elipse (reticências) da propriedade SQL do UniQuery1, a janela abaixo será carregada.
Não vamos entrar em todas as abas disponíveis na janela, vamos nos ater apenas ao comando SQL para efetuar a busca na base de dados para alimentar nossa aplicação. Finalize a janela clicando no botão OK.
Vamos agora configurar agora o clique do nosso Button1, que será responsável por conectar a aplicação e resgatar os dados do servidor preenchendo com eles o ListView1:
procedure TForm1.ConecClick(Sender: TObject); var lvItem : TListViewItem; I: Integer; begin UniConnection1.Close; UniQuery1.Open; ListView1.Items.Clear; ListView1.BeginUpdate; for I := 0 to UniQuery1.RecordCount -1 do begin lvItem := ListView1.Items.AddItem(); lvItem.Text := UniQuery1.Fields[1].AsString + ' ' + UniQuery1.Fields[2].AsString; UniQuery1.Next; end; ListView1.EndUpdate; UniConnection1.Close; end;
Feito isso já podemos executar nossa aplicação. Veja que em Win32 a mesma já funciona perfeitamente:
Sem alterar nenhuma linha vamos alterá-la para distribuição na plataforma Android e confira o resultado no vídeo Abaixo:
Nota: Por ser uma versão Trial temos uma limitação de 6 campos por dataset (tabelas ou consultas)como exibido em mensagem no vídeo. Lembrando que a versão trial tem validade de 60 dias.
TUniProvider sem configuração, mas não sem importância
Concluímos a codificação de nosso exemplo e com isso você pode ter percebido que embora tenhamos incluído em nossa aplicação o MySQLUniProvider1 (TMySQLUniProvider) ele não necessitou nenhuma configuração.
O componente cada provider usa a conectividade nativa específica do SGBD, sendo capazes de realizar as operações CRUD (Create, Read, Update, Delete) considerando automaticamente as particularidades do SGBD selecionado.
Quer saber a importância do provider nesse caso??? Retire-o do projeto e execute-o novamente! Sem ele toda essa "mágica" não é possível, a menos que você tenha a biblioteca cliente instalada em sua máquina.
Conclusão
Com esse dia de testes cheguei a conclusão que vale muito a investir primeiro seu tempo em conhecer mais os componentes e em se adaptando perfeitamente no seu modelo de projeto por que não investir também financeiramente na aquisição da versão completa do UniDAC, afinal a mesma está sendo vendida no site da DevArt por aproximadamente US$ 200,00.
Fico por aqui, abaixo links e até a próxima!