Neste artigo veremos como compilar o driver Qt de acesso ao MySql no Windows®.
Estou presumindo que você ira compilar o driver após a compilação da própria biblioteca Qt, e, obviamente, o MySql deve estar instalado.

O Mysql deve ser instalado no seguinte diretório:

C:\MySQL

Não instale em C:\Arquivos de programas e não permita espaços em branco nos nomes de diretório, escolha a instalação personalisada e mude o diretorio de instalação para este:
C:\MySQL
Atenção para o subdiretório C:\MySQL\MySql Server 5.1, ele também não deve estar presente, pois também contem espaços em branco, todos os subdiretórios devem estar abaixo de C:\MySQL.
Depois de instalar o MySql atenção para o possível erro 1045 quando for rodar o Config Wizard, é um erro muito comum após a instalação do MySql no Windows, aqui tem sugestões de possíveis soluções:

http://www.rad89.com/mysql_install.html

Para compilar o driver Qt para MySql no Windows®, existem alguns detalhes que não constam da documentação da Qt, veremos como contornar este problema, a documentação da Qt é bastante completa, mas neste caso examinaremos os detalhes que faltam.

A documentação da Qt indica este procedimento para gerar o driver Qt MySql no Windows®:


How to Build the QMYSQL Plugin on Windows

You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MySQL):

 cd %QTDIR%\src\plugins\sqldrivers\mysql
 qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\MySQL Server <version>\lib\opt\libmysql.lib" mysql.pro
 nmake

If you are not using a Microsoft compiler, replace nmake with make in the line above.


Substituir o nmake por make, conforme recomenda a documentação da Qt, no caso de você usar o Mingw ao invés do MSVC, não vai funcionar.
O detalhe é que o MySql, suas DLLs e libs no Windows® são compilados com compilador Microsoft e o nmake, o mingw não vai conseguir usar a libmysql.lib.
Temos de gerar uma lib que o Mingw possa usar, para isso vamos usar o reimp, que é um utilitário do pacote Mingw-utils que faz a conversão de libs geradas pelo compilador Microsoft para um formato que o Mingw entenda.

Edite o PATH do Windows® e insira os caminhos do MySql.
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 MySql.
No meu caso, inclui apenas C:\MySQL\bin no PATH, mas você pode, por via das duvidas, incluir também C:\MySQL\lib\opt e C:\MySQL\include. Este é o PATH no meu computador:

C:\MinGW\bin;C:\Qt\4.5.3\bin;C:\PostgreSQL\8.4\include;C:\PostgreSQL\8.4\lib;C:\PostgreSQL\8.4\bin;C:\MySQL\bin;C:\Firebird\Firebird_2_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\WINDOWS\system32\WindowsPowerShell\v1.0

Lembre-se sempre de trocar os numeros de versão da Qt e do MySql pelos numeros da versão que você esta utilizando.
Agora, no prompt do DOS digite:

cd C:\MySQL\lib\opt

Depois, digite:

reimp -d libmysql.lib

Depois, vá para o diretorio C:\Qt\4.5.3\src\plugins\sqldrivers\mysql e digite:


qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.a" mysql.pro

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 é qsqlmysql4.dll.

Alternativamente, ao iniciar a compilação da Qt, se quiser que o configure inclua os driver dos bancos de dados sem incluir o path ou caminho do MySql, faça:


cd C:\MySQL\lib
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib C:\MinGW\lib\libmysql.a

Isto vale para outros bancos alem do MySql.

Agora, copie as libs do Mysql para o diretório C:\MinGW\include , feito isso você pode compilar a Qt com:

configure -qt-sql-mysql -qt-sql-odbc -qt-sql-sqlite ...


O utilitário dlltool já vem junto com o Mingw e esta no diretório C:\MinGW\bin.
O utilitário reimp vem com o pacote Mingw-utils, que pode ser obtido aqui.
Depois de baixar o pacote Mingw-utils descompacte-o em uma pasta qualquer, depois copie o executável reimp para o diretório C:\MinGW\bin, já que este esta no PATH.

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 MySql, 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 MySql, podem ser encontradas no diretório da instalação do MySql, na minha maquina é:

MySql:

C:\MySql\bin

As DLL's da Qt:

C:\Qt\4.5.0\bin

Os drivers da Qt para acesso ao MySql:

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):

Hierarquia de diretórios.

Abaixo, todos os arquivos e DLLs necessários distribuidos pelos diretórios:

Hierarquia de 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_mysql

18/11/2009  11:24              .
18/11/2009  11:24              ..
17/11/2009  17:48           130.048 cadastro.exe
18/11/2009  11:20               593 config.txt
12/10/2009  04:40         2.359.296 libmySQL.dll
10/01/2009  18:32            11.362 mingwm10.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
18/11/2009  11:19              sqldrivers
               7 arquivo(s)     16.828.595 bytes
               3 pasta(s) 16.276.619.264 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_mysql\sqldrivers

18/11/2009  11:19              .
18/11/2009  11:19              ..
12/11/2009  13:41            80.384 qsqlmysql4.dll
               1 arquivo(s)         80.384 bytes
               2 pasta(s) 16.276.611.072 bytes disponíveis


Depois, você tem que configurar o MySql no servidor para dar permissão de acesso a conexões vindas dos computadores da rede, os clientes.
A primeira opção é fazer isso diretamente na linha de comando, usando o prompt do MySql.
Suponha um banco no MySql chamado teste, um usuário chamado rodolfo e a senha abc123 e a rede 192.168.2.0.
Conecte-se como root e digite:

mysql> GRANT ALL PRIVILEGES ON teste.* to 'rodolfo'@'192.168.2.%' identified by "abc123";

Lembre-se que isto só vai funcionar se a porta 3306 estiver liberada por algum eventual Firewall e não houver nenhum bloqueio de antivírus etc.

A segunda maneira de liberar o acesso remoto ao servidor MySql é usando o MySql Administrator.
Vá em Iniciar->Programas->MySql->MySql Administrator, na tela de login conecte-se como root.

Abaixo, tela de login do MySql Administrator.(Clique na imagem para ampliar):

MySql Administrator.

Depois de conectar-se como root, na tela principal selecione "User Administration".(Clique na imagem para ampliar):

MySql Administrator.

Abaixo, a opção "User Administration" selecionada.(Clique na imagem para ampliar):

MySql Administrator.

Abaixo, clique duas vezes em cima do usuário ao qual você quer dar permissão de acesso remoto para ver quais as permissões que ele já tem.(Clique na imagem para ampliar):

MySql Administrator.

Abaixo, em seguida, clique com o botão direito do mouse em cima do usuário, ira se abrir um menu de contexto, escolha a opção "Add host from which the user can connect".(Clique na imagem para ampliar):

MySql Administrator.

Abaixo, em seguida, ira aparecer a tela onde você vai digitar o endereço da rede a qual pertence o usuário que você esta autorizando o acesso.(Clique na imagem para ampliar):

MySql Administrator.

Abaixo, finalizando, o endereço da rede foi adicionado ao usuário.(Clique na imagem para ampliar):

MySql Administrator.

Para finalizar, clique no botão "Apply changes" embaixo a direita.

Se ocorrer algum problema de conexão,relativo a libs ou DLLs não encontradas pelo seu aplicativo na estação, por exemplo, o aplicativo pode não conseguir carregar o driver, qsqlmysql4, devido a algum problema na libmySQL.dll, que é a principal, o "client" do MySql, 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 analisando a qsqlmysql4 e suas dependências.(Clique na imagem para ampliar):

Dependency Walker.

Referencias:

http://christopher.rasch-olsen.no/2009/04/14/qt-45-and-mysql-plugin-with-mingw-on-windows-xp/

http://wiki.qtcentre.org/index.php?title=Building_the_QMYSQL_plugin_on_Windows_using_mingw

Pagina inicial



Comentários:


Nenum comentário

Deixe seu comentário:


 *

 *



 *
  Campos marcados com * são obrigatórios.