Neste tutorial veremos como compilar o driver Qt de acesso ao PostgreSql no Windows®.
Dos bancos de dados Open Source de que eu vou tratar nos tutoriais, PostgreSql, MySql e Firebird, o driver do PostgreSql é o mais fácil de compilar no Windows®.
Lembre-se sempre de instalar o PostgreSql no Windows® no diretório raiz, C:\ , e não em C:\Arquivos de programas para evitar espaços em branco no caminho do arquivo, o Qmake não entende espaços em branco em nomes de diretórios.
Estou presumindo que você ira compilar o driver após a compilação da própria biblioteca Qt, e, obviamente, o PostgreSql deve estar instalado.
Edite o PATH do Windows® e insira os caminhos do PostgreSQl.
Vá em Iniciar->Configurações->Painel de controle->Sistema->Avançado e clique em “Variáveis de ambiente”, edite a variável PATH, adicionando de preferência no inicio da variável os caminhos do MinGw, da Qt e do Postgresql.
Este é o PATH no meu computador:
Lembre-se sempre de trocar os numeros de versão da Qt e do PostgreSql pelos numeros da versão que você esta utilizando.
Agora, no prompt do DOS digite:
E depois, digite:
make
Se não ocorrer nenhum erro, o driver sera compilado e copiado para o diretorio C:\Qt\4.4.3\plugins\sqldrivers, seu nome é qsqlpsql4.dll.
Para distribuir seu aplicativo pelas estações de uma rede intranet de maneira que eles acessem o banco de dados no servidor, neste caso o PostgreSql, um fator importante é a hierarquia de diretórios e a distribuição das DLL's e dos drivers de acesso a banco de dados em cada computador da rede, isto é de suma importância, pois pode trazer alguns problemas.
As DLL's dos exemplos abaixo se referem a conexão com um banco PostgreSql, podem ser encontradas no diretório da instalação do PostgreSql, na minha maquina é:
PostgreSql:
C:\PostgreSQL\8.3\bin
As DLL's da Qt:
C:\Qt\4.5.0\bin
Os drivers da Qt para acesso ao PostgreSql:
C:\Qt\4.5.0\plugins\sqldrivers
A hierarquia de diretórios é esta para para o aplicativo e as DLLs na estação:
Abaixo, imagem da hierarquia de diretórios, onde se vê o nome meuApp você pode nomear como quiser.(Clique na imagem para ampliar):
>
Abaixo, todos os arquivos e DLLs necessários distribuidos pelos diretórios:
>
Abaixo, listagem obtida a partir de um comando “DIR” do DOS dentro dos diretórios mostrando as DLL's e os drivers.
Depois, você tem que configurar o PostgreSql no servidor para dar permissão de acesso a conexões vindas dos computadores da rede, os clientes.
No Windows® você pode usar o PgAdmin para isso, no linux é mais comum editar diretamente o arquivo /etc/postgresql/8.3/main/pg_hba.conf com o vi, no Windows® os usuários estão mais acostumados com ferramentas gráficas, mas também é possível editar o arquivo pg_hba.conf com um editor de texto, no Windows® ele se encontra no diretório C:\PostgreSQL\8.4\data.
Você deve colocar uma linha semelhante a esta, onde esta escrito 192.168.2.0/24 troque pelo endereço da sua rede:
ou
A diferença entre as duas é o tipo de autenticação que sera feita pelo servidor, leia a documentação do PostgreSql.
Abaixo, usando o PgAdmin para editar o arquivo C:\PostgreSQL\8.4\data\pg_hba.conf.(Clique na imagem para ampliar):
>
>
Se ocorrer algum problema de conexão, instale o PgAdmin na estação onde esta ocorrendo o problema e tente conectá-lo ao banco no servidor, o PgAdmin já vem com todas as DLLs clients do PostgreSql. Se for algum problema de libs ou DLLs não encontradas pelo seu aplicativo na estação, por exemplo, o aplicativo pode não conseguir carregar o driver, qsqlpsql4, devido a algum problema na libpq.dll, que é a principal, o "client" do PostgreSql, você pode usar um excelente software chamado Dependency Walker , que analisa as dependências entre as DLLs e mostra uma possível dependência quebrada, DLLs faltando ou DLLs incompatíveis.
Você pode baixá-lo diretamente do site dele, depois crie uma pasta no diretório raiz e descompacte o arquivo nesta pasta, ele não cria atalho no desktop nem entrada no menu iniciar, basta rodar o Dependency Walker direto da pasta onde ele esta,vá ao menu File->Open e escolha uma DLL ou executável, é só isso, ele ira abrir e analisar, conforme a imagem abaixo..
Abaixo, o Dependency Walker analizando a qsqlpsql4 e suas dependências.(Clique na imagem para ampliar):
>
Dos bancos de dados Open Source de que eu vou tratar nos tutoriais, PostgreSql, MySql e Firebird, o driver do PostgreSql é o mais fácil de compilar no Windows®.
Lembre-se sempre de instalar o PostgreSql no Windows® no diretório raiz, C:\ , e não em C:\Arquivos de programas para evitar espaços em branco no caminho do arquivo, o Qmake não entende espaços em branco em nomes de diretórios.
Estou presumindo que você ira compilar o driver após a compilação da própria biblioteca Qt, e, obviamente, o PostgreSql deve estar instalado.
Edite o PATH do Windows® e insira os caminhos do PostgreSQl.
Vá em Iniciar->Configurações->Painel de controle->Sistema->Avançado e clique em “Variáveis de ambiente”, edite a variável PATH, adicionando de preferência no inicio da variável os caminhos do MinGw, da Qt e do Postgresql.
Este é o PATH no meu computador:
C:\MinGW\bin;C:\Qt\4.4.3\bin;C:\PostgreSQL\8.3\include;C:\PostgreSQL\8.3\lib;C:\PostgreSQL\8.3\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
Lembre-se sempre de trocar os numeros de versão da Qt e do PostgreSql pelos numeros da versão que você esta utilizando.
Agora, no prompt do DOS digite:
cd C:\Qt\4.4.3\src\plugins\sqldrivers\psql
qmake -o Makefile "INCLUDEPATH+=C:\PostgreSQL\8.3\include" "LIBS+=C:\PostgreSQL\8.3\lib\libpq.lib" psql.pro
E depois, digite:
make
Se não ocorrer nenhum erro, o driver sera compilado e copiado para o diretorio C:\Qt\4.4.3\plugins\sqldrivers, seu nome é qsqlpsql4.dll.
Para distribuir seu aplicativo pelas estações de uma rede intranet de maneira que eles acessem o banco de dados no servidor, neste caso o PostgreSql, um fator importante é a hierarquia de diretórios e a distribuição das DLL's e dos drivers de acesso a banco de dados em cada computador da rede, isto é de suma importância, pois pode trazer alguns problemas.
As DLL's dos exemplos abaixo se referem a conexão com um banco PostgreSql, podem ser encontradas no diretório da instalação do PostgreSql, na minha maquina é:
PostgreSql:
C:\PostgreSQL\8.3\bin
As DLL's da Qt:
C:\Qt\4.5.0\bin
Os drivers da Qt para acesso ao PostgreSql:
C:\Qt\4.5.0\plugins\sqldrivers
A hierarquia de diretórios é esta para para o aplicativo e as DLLs na estação:
seuApp
|----->sqldrivers
Abaixo, imagem da hierarquia de diretórios, onde se vê o nome meuApp você pode nomear como quiser.(Clique na imagem para ampliar):
>

Abaixo, todos os arquivos e DLLs necessários distribuidos pelos diretórios:
>
Abaixo, listagem obtida a partir de um comando “DIR” do DOS dentro dos diretórios mostrando as DLL's e os drivers.
O volume na unidade C não tem nome. O número de série do volume é 60DB-CB30 Pasta de C:\cadastro_postgresql 17/11/2009 17:58. 17/11/2009 17:58 .. 17/11/2009 17:48 130.048 cadastro.exe 13/04/2009 10:23 12.288 comerr32.dll 17/11/2009 17:54 593 config.txt 13/04/2009 10:23 135.168 gssapi32.dll 13/04/2009 10:23 19.968 k5sprt32.dll 13/04/2009 10:23 634.880 krb5_32.dll 13/04/2009 12:09 1.032.192 libeay32.dll 06/01/2009 12:51 968.886 libiconv-2.dll 06/01/2009 12:51 83.906 libintl-8.dll 08/09/2009 05:48 172.032 libpq.dll 10/01/2009 18:32 11.362 mingwm10.dll 08/04/2008 12:13 348.160 msvcr71.dll 07/11/2009 16:17 2.737.664 QtCore4.dll 07/11/2009 16:39 11.280.384 QtGui4.dll 07/11/2009 16:40 309.248 QtSql4.dll 17/11/2009 17:52 sqldrivers 13/04/2009 12:09 212.992 ssleay32.dll 16 arquivo(s) 18.089.771 bytes 3 pasta(s) 16.276.557.824 bytes disponíveis O volume na unidade C não tem nome. O número de série do volume é 60DB-CB30 Pasta de C:\cadastro_postgresql\sqldrivers 17/11/2009 17:52 . 17/11/2009 17:52 .. 17/11/2009 13:40 116.224 qsqlpsql4.dll 1 arquivo(s) 116.224 bytes 2 pasta(s) 16.276.557.824 bytes disponíveis
Depois, você tem que configurar o PostgreSql no servidor para dar permissão de acesso a conexões vindas dos computadores da rede, os clientes.
No Windows® você pode usar o PgAdmin para isso, no linux é mais comum editar diretamente o arquivo /etc/postgresql/8.3/main/pg_hba.conf com o vi, no Windows® os usuários estão mais acostumados com ferramentas gráficas, mas também é possível editar o arquivo pg_hba.conf com um editor de texto, no Windows® ele se encontra no diretório C:\PostgreSQL\8.4\data.
Você deve colocar uma linha semelhante a esta, onde esta escrito 192.168.2.0/24 troque pelo endereço da sua rede:
host all all 192.168.2.0/24 ident sameuser
ou
host all all 192.168.2.0/24 md5
A diferença entre as duas é o tipo de autenticação que sera feita pelo servidor, leia a documentação do PostgreSql.
Abaixo, usando o PgAdmin para editar o arquivo C:\PostgreSQL\8.4\data\pg_hba.conf.(Clique na imagem para ampliar):
>
>
Se ocorrer algum problema de conexão, instale o PgAdmin na estação onde esta ocorrendo o problema e tente conectá-lo ao banco no servidor, o PgAdmin já vem com todas as DLLs clients do PostgreSql. Se for algum problema de libs ou DLLs não encontradas pelo seu aplicativo na estação, por exemplo, o aplicativo pode não conseguir carregar o driver, qsqlpsql4, devido a algum problema na libpq.dll, que é a principal, o "client" do PostgreSql, você pode usar um excelente software chamado Dependency Walker , que analisa as dependências entre as DLLs e mostra uma possível dependência quebrada, DLLs faltando ou DLLs incompatíveis.
Você pode baixá-lo diretamente do site dele, depois crie uma pasta no diretório raiz e descompacte o arquivo nesta pasta, ele não cria atalho no desktop nem entrada no menu iniciar, basta rodar o Dependency Walker direto da pasta onde ele esta,vá ao menu File->Open e escolha uma DLL ou executável, é só isso, ele ira abrir e analisar, conforme a imagem abaixo..
Abaixo, o Dependency Walker analizando a qsqlpsql4 e suas dependências.(Clique na imagem para ampliar):
>