Postgres no Delphi

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (4)  (0)

Acessando o Postgres no Delphi 8/2005.

Acessando o Postgres no Delphi 8/2005

 

O PostgreSQL é um sistema de gerenciamento de banco de dados lançado sob a licença BSD e que em breve, com o lançamento da versão 8.0 (que inclui uma versão nativa para Windows, sem necessidade de se utilizar o CygWin, e atualmente encontra-se em fase de testes), deve se tornar uma opção ainda mais atraente em termo de banco de dados livre. O desenvolvedor interessado em acessar um banco PostgreSQL no .NET já deve saber que nem o .NET nem o Delphi vem com algum Data Provider nativo para conexão com o PostgreSQL (exceto por uma versão Trial de um Data Priovider BDP.NET, da CoreLab, que vem em um dos CDs do Delphi). Neste artigo demonstraremos alternativas gratuitas para acesso a um banco de dados Postgres através de uma aplicação ASP.NET no Delphi.

ODBC.NET

O ODBC.NET é um add-on para o framework. NET, que permite acesso a bancos de dados através de seus respectivos drivers ODBC, do mesmo modo que o OLEDB.NET (disponível no namespace system.data.oledb) trabalha com os drivers OLE DB. Para checar se ele está instalado, verifique se o assembly microsoft.data.odbc está listado no GAC - Global Assembly Cache (veja o quadro “o que é o GAC?”).

O que é o GAC?

Um assembly pode ser colocado em dois locais: no mesmo diretório da aplicação que o utiliza (o assembly fica visível apenas para esta aplicação) ou pode ser colocado no GAC - Global Assembly Cache, que é um repositório que torna o assembly disponível para todos os aplicativos do sistema. Para visualizar os assemblies instalados no GAC, abra uma janela do Windows Explorer, digite “%windir%\assembly” sem aspas na barra de endereço e  pressione ENTER (Figura 1).

 

Figura 1. Listagem do GAC

Caso o assembly microsoft.data.odbc não esteja listado, você deverá baixar o arquivo de instalação do ODBC.NET na página de downloads da Microsoft (ver links). Verifique se seu sistema preenche os pré-requisitos para a instalação do add-on (caso não os possua, os dois últimos também estão disponíveis na página de downloads da Microsoft):

 

·        Windows 98/Me/NT/XP/2000;

·        .NET framework instalado;

·        MDAC (Microsoft Data Access Components) 2.7 ou superior.

 

Após baixar e instalar o ODBC.NET, precisaremos ter o driver ODBC para conexão com o PostgreSQL instalado. Repare que o ODBC.NET pode ser utilizado para conexão com qualquer banco que possua um driver ODBC, não apenas o PostgreSQL. No nosso caso, utilizaremos o psqlODBC (ver Links). Para verificar se ele já está instalado, vá ao Painel de Controle e Clique em Fontes de Dados ODBC (Windows 98/Me) ou em Ferramentas Administrativas\ Fontes de Dados ODBC (Windows NT/2000/XP), clique na aba Drivers e veja se ele aparece na relação de drivers instalados (ver figura 2).

 

Figura 2. Relação de drivers ODBC instalados

Caso não esteja instalado, baixe o arquivo de instalação na página do psqlODBC (ver links) e instale-o. Agora podemos nos conectar ao banco. Como exemplo, criaremos uma tabela simples no PostgreSQL, um cadastro básico de contatos com nome, dois telefones e email (ver tabela 1).

Campo

Tipo

Tamanho

Observações

cod_contato

serial

-

PRIMARY KEY

nome

varchar

100

NOT NULL

telefone1

varchar

15

-

telefone2

varchar

15

-

email

varchar

50

-

 

 

 

 

Tabela 1. Campos da tabela contatos

Iremos criar uma aplicação simples, para acessar e alterar os dados da tabela “contatos” (para baixar o código completo, veja na seção links). Inicialmente, inclua o namespace System.Data.Odbc na cláusula Uses da unit. Caso o Delphi não reconheça o namespace system.data.odbc, adicione uma referência ao assembly microsoft.data.odbc ao projeto (veja o quadro “Adicionando uma referência a um assembly”).

Adicionando uma referência a um assembly

Para que seu projeto faça referência a um assembly .NET, abra o Project Manager, clique com o botão direiro em References (Figura 3) e clique em “Add Reference...”.  Quando aparecer o formulário da Figura 4, você poderá selecioná-lo da lista e clicar em “Add Reference”, caso ele esteja instalado no GAC, ou selecioná-lo manualmente, clicando em “Browse...”.

 

Figura 3. Adicionando uma referência (1)

 

Figura 4. Adicionando uma referência (2)

Para efetuar a conexão com o banco utilizaremos a classe OdbcConnection, que recebe como parâmetro a string de conexão contendo os parâmetros necessários para que possamos nos conectar ao banco. Podemos efetuar a conexão de dois modos:

 

·        Informar todos os parâmetros na string de conexão.

 

Exemplo: ‘DRIVER={PostgreSQL};SERVER=10.1.0.20;DATABASE=meubanco;UID=rodrigo;PWD=Pwd97x’;

 

(Tabela 2)

 

·        Criar um datasource ODBC e informar apenas seu nome.

Exemplo:

‘DSN=dsnMeuBanco’

 

Parâmetro

DRIVER

Nome do Driver para conexão, entre chaves (no nosso caso, {PostgreSQL})

SERVER

Nome ou IP do servidor

DATABASE

Nome do banco de dados

UID

Nome do usuário

PWD

Senha do usuário

DNS

Nome do Data Source ODBC utilizado para conexão

 

 

 

 

Tabela 2. Parâmetros da string de conexão do OdbcConnection

A Listagem 1 mostra um exemplo de código que conecta ao banco e retorna todos os registros da tabela em um Datagrid.

 

Listagem 1. Conectando ao banco e retornando registros.

procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);

var

  conn: OdbcConnection;

  adapter: OdbcDataAdapter;

  commBuilder: OdbcCommandBuilder;

  ds: DataSet; // Adicione o namespace System.Data na cláusula uses

begin

   // Cria e abre a conexão.

  conn := OdbcConnection.Create('DRIVER={PostgreSQL};SERVER=servidor;' +

                                'DATABASE=banco;UID=rpc;PWD=PwDPd8');

  conn.Open;

  // Cria o Data Adapter.

  adapter := OdbcDataAdapter.Create('SELECT * FROM contatos', conn);

  // A linha abaixo cria SQLs de alteração e inclusão para o Data Adapter,

  // desde que ele só retorne dados de uma tabela.

  commBuilder := OdbcCommandBuilder.Create(adapter);

  // Cria e preenche o DataSet

  ds := DataSet.Create;

  adapter.Fill(ds, 'contatos');

  // Vincula o DataSet ao DataGrid

  DataGrid1.DataSource := ds;

  DataGrid1.DataBind;

  // Informa o total de registros

  lblTotal.Text := 'Total de contatos: ' + ds.Tables['contatos'].Rows.Count.ToString;

end;

npgsql - .Net Data Provider for PostgreSQL

 

Outra alternativa que pode ser levada em consideração é o uso do npgsql, um .NET Data Provider implementado em C# e lançado sob a licença LGPL, e que na época da produção deste artigo encontrava-se na versão 0.7beta3, que é a versão que iremos utilizar. Como ele ainda encontra-se em desenvolvimento, consulte o site do projeto (ver links) e avalie se as features já suportadas são suficientes, e se algum bug pode comprometer seu sistema. Para utilizá-lo, verifique no GAC se os assemblies Mono.Security.Protocol.Tls e Npgsql estão instalados (veja quadro “O que é o GAC?”), caso não estejam baixe o arquivo com os arquivos e manuais na página do npgsql. Descompacte o arquivo e procure pela pasta npgsql\bin\ms, dentro dela estão os assemblies que deverão ser instalados.  Abra uma janela de terminal (vá em Iniciar\Executar e digite cmd),  vá para a pasta onde estão os assemblies e execute a linha abaixo para registrar o npgsql.dll:

 

"c:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Bin\gacutil.exe" –i Npgsql.dll

 

Você deverá ter uma tela com a da Figura 5. Repita a operação para o arquivo Mono.Security.Protocol.Tls.

 

Figura 5. Instalação do npgsql

Verifique se os assemblies estão agora listados corretamente no GAC. Para utilizarmos o npgsql, adicionamos o namespace npgsql à cláusula uses da unit. Caso o namespace não seja reconhecido, adicione a referência ao assembly npgsql (veja box Adicionando uma referência a um assembly). Os nomes das classes utilizadas pelo npgsql são bastante semelhantes aos das classes utilizadas pelos demais ADO.NET Data Providers, como por exemplo a classe OdbcCommandBuilder do ODBC.NET e a classe npgsqlCommandBuilder para o npgsql, o que facilita bastante a sua utilização. A Listagem 2 mostra uma rotina de exemplo, que insere um novo registro na tabela contatos.

 

Listagem 2. Procedure para inserir novo contato.

procedure TWebForm1.InserirContato(Nome, Telefone1, Telefone2,

  Email: String);

var

  Conn: NpgsqlConnection;

  Comm: NpgsqlCommand;

  SQL: string;

begin

  // Cria e abre a conexão

  Conn := pgsqlConnection.Create('SERVER=servidor;DATABASE=banco;UID=rpc;PWD=PwdXc9'); 

  Conn.Open;

  // SQL de inserção

  SQL := 'INSERT INTO contatos (nome, telefone1, telefone2, email) ' +

       'VALUES (''' + Nome + ''',''' + Telefone1 + ''','''  + Telefone2 + ''','''  + EMail + ''')'

  // Cria o command e o executa

  Comm := NpgsqlCommand.Create(SQL, Conn);

  Comm.ExecuteNonQuery;

  // Fecha a conexão

  Conn.Close;

end;

 

A Tabela 3 contém uma relação dos principais parâmetros que podem ser passados pela string de conexão do npgsqlConnection.

Parâmetro

SERVER

Nome ou IP do servidor

DATABASE

Nome do banco de dados

USER ID, USER, UID

Nome do usuário

PASSWORD, PWD

Senha do usuário

PORT

Porta TCP utilizada pelo servidor. O default é a 5432

TIMEOUT

Tempo que se deve aguardar conexão (em segundos)

 

 

 

 

Tabela 3. Parâmetros da string de conexão do npgsqlConnection

Conclusões

Dependendo das necessidades do sistema sendo desenvolvido, ele pode ser perfeitamente atendido por um Provider como o npgsql (que, lembrando, ainda encontra-se em desenvolvimento) ou pode necessitar de um Provider pago, como o da CoreLab. O desenvolvedor possui diversas alternativas para o acesso ao PostgreSQL no Delphi, tanto gratuitas quanto pagas. Cabe a ele avaliar os prós e contras de cada uma delas, e verificar se elas atendem os requisitos desejados, como velocidade, disponibilidade, segurança, etc, que variam bastante de projeto para projeto.

 

Links

www.microsoft.com/downloads

Página de downloads da Microsoft

 

http://www.postgresql.org

Página do PostgreSQL

 

http://www.postgresql.org.br

Página do PostgreSQL (em portugês)

 

gborg.postgresql.org/project/psqlodbc/projdisplay.php

Página do psqlODBC

 

gborg.postgresql.org/project/npgsql/projdisplay.php

Página do npgsql - .NET Data Provider for PostgreSQL

 

http://crlab.com/bdp/

Relação dos Borland Data Providers disponibilizados pela CoreLab

 

Rodrigo Pereira da Cunha (rodrigopc@gmail.com) é Técnico em Informática com ênfase em Processamento de Dados pelo Centro Federal de Educação Tecnológica do RN, trabalha há seis anos com Delphi e atualmente trabalha na Subsecretaria de Informática do Tribunal Regional Federal da 5ª Região.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ficou com alguma dúvida?