Conexão com vários bancos usando ZeosDB

Veja neste artigo como se conectar à vários SGBD (Firebird, Sqlite, PostgreSQL, SQLServer e MySql) usando a engine de acesso ZEOSLIB.

Olá pessoal, neste artigo vou demonstrar exemplos de conexões com vários SGBDs utilizando a engine de acesso ZEOSLIB. Pesquisando no Google pode-se encontrar exemplos individuais de acesso para cada um dos banco mencionados, mas nesse artigo estou utilizando as versões mais recentes de cada SGBD com exceção do SQLServer, seguem a versões:

O foco desse artigo não é apresentar comparações entre PostgreSQL, Sqlite, Firebird, MySql e SQLServer, mas sim demonstrar peculiaridades que cada conexão exige, como problemas com DLLs, Codepage, Protocolos e etc. Outro objetivo desse artigo é sanar dúvidas quanto a questão da continuidade do projeto ZeosLib, que segundo comentários a versão 7 estaria estacionada no estado Alpha ou até mesmo que o projeto estaria sendo descontinuado.

Em primeiro lugar, gostaria que os leitores visitassem o site oficial do projeto neste link: http://zeos.firmos.at/. Esse site possui um fórum muito ativo sobre todas as versões do projeto, tanto a já conhecida como versão 6.6 estável, como a versão 7 Alpha que está em teste. Existe um tópico explicando o porquê de a versão 7 ainda não ter passado para o estado Beta de teste. De acordo com os administradores do projeto, antes da versão 7 se tornar estável, ela tem que passar por 3 fases de teste, sendo:

  1. Alpha
  2. Beta
  3. Gama

Essa prática faz com que todas as correções possíveis sejam feitas na fase de teste, ainda neste site podemos atualizar o SVN: https://zeoslib.svn.sourceforge.net/svnroot/zeoslib/branches/testing-egonhugeist para a versão de testes da comunidade. Os exemplos desse artigo foram desenvolvidos usando essa versão, o processo de instalação é o mesmo de sempre para ZeosLib. Como todo projeto OpenSource, são muito importantes as informações de problemas ou anomalias com o componente, todas as postagens de possíveis bugs no fórum são analisadas por um administrador e posteriormente corrigidas, se necessário, na versão de teste. Posteriormente uma nova verão para SVN é lançada. Essa prática é muito importante porque é através desse feedback que são corrigidos os bugs encontrados por nós programadores que utilizamos todos dias essa engine.

Para esse artigo vamos criar um banco de dados com o nome “AGENDA”, dentro desse banco criaremos uma tabela chamada “CONTATO”, lembrando que vamos criar essa mesma estrutura de banco no Firebird, MySql, SQLServer, Sqlite e PostgreSQL, ou seja, vamos repetir campos e tipos de dados. Vou postar o script para criação da tabela mas vale ressaltar que: como estamos trabalhando com 5 tipos de SGBD alguns comandos podem variar principalmente na questão do campo “ID” que é auto_increment, segue abaixo o script básico:

Listagem 1: Script para criação da tabela Contato

CREATE TABLE CONTATO( ID INT NOT NULL IDENTITY, NOME VARCHAR(50), FONE VARCHAR(15), CELULAR VARCHAR(15), EMAIL VARCHAR(50), PRIMARY KEY(ID));

Vamos iniciar um novo projeto no Delphi e adicionar os componentes no form, sendo que como pré-requisito temos que ter a suíte de componentes ZeosLib instalada. Vou exibir todas as configurações necessárias para o componente ZConnection, sendo que o ZTable e DataSource seguem o padrão normal de configuração.


Figura 1: Exibe os componentes da paleta Zeos Access

Observação: Notem que existem alguns componentes adicionais nessa paleta se comparado com a versão tradicional, a funcionalidade de tais componentes pode ser tema para um próximo artigo. Destacando que não é necessário utilizar ClientDataSet para navegação entre os registros, pois o componente ZTable é bidirecional e move-se tanto para cima quanto para baixo dos registros.

1 - PageControle (TPageControl) Align= alClient 5 Page, 1 para cada SGBD 5 - DBGrids (1 para cada Page) Align=alClient 5 - ZConnection 1º - Name=”ConexaoMySQL” 2º - Name=”ConexaoSQLSever” 3º - Name=”ConexaoPostgreSQL” 4º - Name=”ConexaoSQLite” 5º - Name=”ConexaoFirebird” 5 - Ztable 1º - Name=”tblMySQL” 2º - Name=”tblSQLSever” 3º - Name=”tblPostgreSQL” 4º - Name=”tblSQLite” 5º - Name=”tblFirebird” 5 - DataSource 1º - Name=”dtsMySQL” 2º - Name=”dtsSQLSever” 3º - Name=”dtsPostgreSQL” 4º - Name=”dtsSQLite” 5º - Name=”dtsFirebird”

Para conexão simultânea aos 5 SGBDs estou usando um conjunto de componentes para cada conexão (ZConnection, ZTable, DataSource), é evidente que no dia a dia esse tipo de prática é incomum. O Layout final da tela segue abaixo:


Figura 2: Exibe o layout final de tela

Agora configura as conexões individualmente, caso seja necessário coloco um comentário ou dica sobre peculiaridades sobre essa configuração, todas as conexões serão configuradas em tempo de design e usando Object Inspector.

Conexão com banco SQLite


Figura 3: Configurações da conexão com SQLite 3

Talvez essa seja uma das conexões mais fáceis de configurar, não requer User, Password ou Port, simplesmente setamos as seguintes propriedades:

Dica: É necessário que a dll sqlite3.dll esteja na pasta System32 ou na pasta do Aplicativo, baixei 3 vezes direto do site oficial SQLite mas não funcionou, então usei a dll que está na pasta lib dentro do diretório de instalação do ZeosLib. Senão for informado o valor “UTF-8” na propriedade ClientCodpage teremos problemas com caracteres com acentuação e o famoso “Ç”, é bem possível que símbolos muito estranhos apareceram no lugar desses caracteres.

Conexão com banco SQL Server


Figura 4: Exibe configurações da conexão com SQLServer 2008

Essa conexão foi manhosa mas deu certo também, é necessário usar como forma de Authentication -> SQL Server Authentication, no meu caso eu habilitei o usuário “sa” e atribui uma senha para ele.

Dica: Possivelmente o Zeos vai reclamar a falta da dll ntwdblib.dll, uma procura rápida no google e podemos encontrar sites para baixar essa dll, depois é só copiá-la para o diretório System32.

Conexão com banco MySQL


Figura 5: Configurações da conexão com MySQL 5.5

Configuração bem tranquila, preenchendo as propriedades necessárias não haverá problemas de conexão.

Conexão com banco Firebird


Figura 6: Configurações da conexão com Firebird 2.5.1

Outra configuração bem tranquila, preenchendo as propriedades necessárias não haverá problemas de conexão.

Dica: Existem 2 opções de protocolo na propriedade Protocol para Firebird 2.5, também pode ser selecionado a opção firebird-2.5, realizei alguns testes e não encontrei diferença entre as 2 opções.

Conexão com banco PostgreSQL


Figura 7: Configurações da conexão com PostgreSQL 9.1.4

Essa conexão merece um destaque especial, como já é de conhecimento da maioria dos desenvolvedores Delphi, sempre que precisávamos trabalhar com o SGBD PostgreSQL tínhamos que instalar drivers ODBC e posteriormente usar componentes da paleta ADO ou atualmente dbGo para efetuar uma conexão com o banco PostgreSQL. A partir da versão do DelphiXE2 a engine DBExpress oferece suporte nativo para esse banco, mas versões anteriores era difícil somente com ADO. A engine ZeosLib oferece conexões com PostgreSQL sem a necessidade de instalação de qualquer driver extra e com uma simples configurações do componente ZConnection.

Dica: Senão for informado o valor “UTF-8” na propriedade ClientCodpage teremos problemas com caracteres com acentuação e o famoso “Ç”, é bem possível que símbolos muito estranhos apareceram no lugar desses caracteres.

Durante uma conversa com o Administrador do projeto Zeos, perguntei sobre a questão de usar o protocol=”postgresql-8” para versão 9 do PostgreSQL, ele me informou que ainda não apoia essa prática, pois não foram feitos testes com essa versão 9 do PostgresSQL. Realizei alguns pequenos testes e não encontrei nenhum tipo de problema, mas o correto é realizar testes em um cenário pré-definido com vários acessos simultâneos gerando estresse no banco e com um volume grande de informações.

Vale ressaltar que para trabalhar em rede com o PostgresSQL é necessário algumas configurações adicionais em seus arquivos de configuração.

Adicionei as mesmas informações em todos os bancos, segue o resultado final, basta clicar na aba com o nome do banco e verificar os dados, como são as mesmas informações estou exibindo somente os dados da primeira aba.


Figura 8: Dados do banco PostgreSQL

Bom pessoal, demonstrei neste artigo as facilidades que a engine ZeosLib oferece para conexão com vários SGBD, lembrando que usei a versão 7 Alpha que ainda está em fase de testes. Depende somente de nós para que essa versão avance de estado, comunicando todos bugs encontrados no site oficial do projeto ZEOS.

Espero que tenham apreciado esse artigo e até a próxima.

Abraço...

Artigos relacionados