Conectando ao PostgreSQL com dbExpress ODBC driver

O Delphi XE2 e C++Builder XE2 finalmente trouxeram o driver ODBC para dbExpress, com este driver você pode conectar a qualquer banco de dados que disponibilize um driver ODBC usando o dbExpress em aplicações FireMonkey e VCL. Até o Delphi XE3 o driver ODBC somente é compatível com a plataforma Windows.

Para exemplificar melhor como funciona criei uma aplicação FireMonkey que mostra como podemos utilizar o dbExpress ODBC driver para conectar ao banco de dados PostgreSQL.

Antes de iniciar o desenvolvimento você precisa configurar o seu ambiente conforme os passos abaixo:

  • Instalar o driver ODBC do PostgreSQL na máquina que irá executar a aplicação, o driver pode ser baixado aqui.
    Vale lembrar que aplicações compiladas como 32-bit requerem a versão 32-bit do driver ODBC da base de dados a ser utilizada, para aplicações 64-bit será necessário o driver ODBC 64-bit.
  • Depois de instalar o driver, através do ODBC Data Source Administrator (odbcad32.exe) crie e configure um alias ODBC, pode ser do tipo User DSN ou System DSN:

Instruções para aqueles que usam Windows 64-bit

  • Para aplicações 32-bit use o c:\Windows\SysWOW64\odbcad32.exe
  • Para aplicações 64-bit use o c:\Windows\system32\odbcad32.exe

Instruções para aqueles que usam Windows 32-bit

  • Use o c:\Windows\system32\odbcad32.exe

A seguir crie um alias dbExpress ODBC no Data Explorer, lembrando que Database Name é o nome do Data Source criado no ODBC Administrator, neste exemplo o chamei de PostgreSQL35W. Configurações adicionais do driver para acessar a base de dados, como usuário e senha já foram configuradas no Data Source, você pode sobrescrever o usuário e senha na conexão dbExpress.

Suponho que você já sabe como utilizar os componentes de acesso a dados do dbExpress (SQLConnection, DataSetProvider e ClientDataSet), basta conectá-los da mesma forma que você sempre fez com aplicações que utilizam os componentes dbExpress. A configuração do SQLConnection será configurada conforme abaixo:

  object SQLConnection1: TSQLConnection
    ConnectionName = 'PostgreSQLOdbc'
    DriverName = 'ODBC'
    LoginPrompt = False
    Params.Strings = (
      'drivername=ODBC'
      'Database=PostgreSQL35W')
  end

Além de poder utilizar os componentes dbExpress em aplicações VCL e FireMonkey, você pode utilizar o dbExpress framework para conectar a bancos de dados que não tenham um driver nativo. A figura abaixo mostra a aplicação FireMonkey conectada a PostgreSQL através do dbExpress ODBC driver.

Este exemplo pode ser encontrado no diretório de exemplos do Delphi ou no repositório de demos do RAD Studio no Source Forge através deste  link.

23 respostas
  1. @DevWellington
    @DevWellington says:

    E como fica a comparação de um acesso nativo ? teria muita diferença em relação ao acesso a outro banco de dados nativo ? Estou pensando em trocar o mySQL pelo PostgreSQL o que acha, vou perder muito em performance, em relação ao uso do ODBC ????

    Grato

    Responder
    • Andreano Lanusse
      Andreano Lanusse says:

      @DevWellington, procura no Google comparativos de performance entre MySQL e PostgreSQL, o driver ODBC não deve ser usado como o comparativo de performance. Já que você está querendo trocar, da uma olhada no InterBase, será bem mais vantajoso

      Responder
  2. Felipe
    Felipe says:

    Eu instalei o trial do XE2 para testar o campo do tipo ByteA no PostgreSQL e parece que não deu certo… eu uso para guardar imagens… eu tentei criar os campos e foi retornado TVarBytesField, antes era retornado TBlobField, seria algo haver com isso ou o driver ODBC não suporta esse tipo de dado?

    Responder
      • Walmir Ribeiro Junior
        Walmir Ribeiro Junior says:

        Olá Andreano..
        Tenho uma duvida, como seria no caso de uma aplicacao feita em delphi + postgresql que roda em varios computadores? Eu teria de instalar o driver odbc em cada maquina? Nao teria um componente semalhante ao antigo Zeos que funciona tao bem no delphi7?
        Att,

        Walmir Ribeiro Junior

        Responder
        • Andreano Lanusse
          Andreano Lanusse says:

          @Walmir,

          Sim, instalar ODBC em cada máquina, eu não conheço nenhum componente para PostgreSQL que faça a conexão direto sem passar por um cliente local.

          Responder
  3. Robson
    Robson says:

    Fiz toda instalação: Postgres 9.1 64bits, driver ODBC psqlodbc_09_01_0100-x64, configurei e testei a conexão e deu tudo ok mas, quando fui configurar no Delphi XE2 Update #, tive o seguinte erro: Borland.Data.TDBXError: [Microsoft][ODBC Driver Manager] A conexão não está aberta. O erro aconteceu quando cliquei no Test Connection na caixa de diálogo do Modify Connection depois de criada minha nova conexão ODBC. Poderia me ajudar? Obrigado Robson

    Responder
    • bruno
      bruno says:

      Robson tive o mesmo problema e consegui contorná-lo da seguinte maneira: no executar excute este comando e em fontes de dados do usuario tente remover todos os drivers listados inclusive o postgress, no meu caso ele deu erro entao eu desinstalei o driver e instalei o driver 32bits apesar do meu windows 7 ser 64bits. Depois ele diz que nao achou o driver, nao tem proplema apenas click em adicionari novo driver e adicione o driver do postgress

      Responder
  4. Luiz Fernando Campos Bhering
    Luiz Fernando Campos Bhering says:

    Andreano, Boa tarde !

    Estou utilizando o Delphi XE2 com o Postgres 9.2 e ao gravar um campo do tipo Text o seguinte erro ocorre:

    —————————
    Debugger Exception Notification
    —————————
    Project SIBE4.exe raised exception class TDBXError with message ‘Previous call was not SQLPutData or SQLParamData’.
    —————————
    Break Continue Help
    —————————

    Se eu utilizo o ADO o mesmo erro não ocorre. Você sabe o que pode está ocorrendo ?

    Desde já agradeço !

    Responder

Trackbacks & Pingbacks

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.