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®:
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:
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:
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:
Agora, copie as libs do Mysql para o diretório C:\MinGW\include , feito isso você pode compilar a Qt com:
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:
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 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):

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

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

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

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

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

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

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

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

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_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):
Depois de conectar-se como root, na tela principal selecione "User Administration".(Clique na imagem para ampliar):
Abaixo, a opção "User Administration" selecionada.(Clique na imagem para ampliar):
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):
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):
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):
Abaixo, finalizando, o endereço da rede foi adicionado ao usuário.(Clique na imagem para ampliar):
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):
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