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.
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
@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
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?
Ótimo posto. O link para download do drive ODBC deve ter mudado tentem esse http://ftp.postgresql.org/pub/odbc/versions/msi/
Obrigado Edmar, provavelmente eles mudaram o link desde que eu publiquei este post.
Já atualizei o artigo.
Caro Andreano
Não há driver nativo do DBexpress para Oracle no XE2? Pois só visualizo Datasnap, MySql e Interbase.
Oi Hugo,
Driver dbExpress para Oracle está disponível no Delphi Enterprise e Architect, você provavelmente está usando o Professional
Mas tem como instalar o driver dbExpress Oracle no Delphi XE2 professional??
Obrigado Andreano.
@Andrea, fazer isso viola o contrato de licença
Obg, o meu aqui deu certo com apenas o primeiro passo!!! uso o mysql 5,
vlw msm, ha dias procurava uma solução!!
E o ZeosLib acesso nativo? não é mais rápido usar com PostGresql. Eu uso PostGreSql e gosto muito, principalmente da performance.
@Rudimar, nunca fiz testes de performance para comparar.
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
@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.
No meu da um erro “a conexao nao esta aberta” dando muito trabalho pra arrumar isso
Esse recurso não está presente do Delphi XE?
@Douglas somente no Delphi XE2 e versões posteriores
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
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
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 !
@Luiz sem ver o código fica difícil dizer, mas parece que você está usando um parametro que não é suportado pelo driver.
amigos, conseguir resolver este problema da seguinte forma: removi o postgres odbc e baixei a versao psqlodbc_09_00_0101.zip para 32bits do link http://ftp.postgresql.org/pub/odbc/versions/msi/ daí fui no executar e digitei c:\Windows\SysWOW64\odbcad32.exe , configurei novamente a conexão com o banco. Espero ter ajudado.. abraços…