Problem with QMYSQLDriver
-
Hi
Normally it build in same folder or just a folder above it.Im wondering if your use case is different from normal use.
Normally you dont new a driver yourself, but uses it via the Databaseclass
something like. ( not tested as i dont have mysql installed here)#include "mainwindow.h" #include <QApplication> #include <QWidget> #include <QtSql> #include <QDebug> #include "qsqldriver.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QString servername = "LOCALHOST//QMYSQL"; QString dbname = "test"; QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setConnectOptions(); QString dsn = QString("DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes;").arg(servername) .arg(dbname); db.setDatabaseName(dsn); if(db.open()){ qDebug() << "Opened"; db.close(); } else{ qDebug() << "Error =" << db.lastError().text(); qDebug ( ) << QSqlDatabase :: drivers ( ); } MainWindow w; w.show(); return a.exec(); }
-
Well yes if I use QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); it doesn't return any error. But what I wanted to do actually is doing what I saw in the QSqlDatabase help document in Qt. There it said I could use another driver (in this case the mySqlConnector) and use it through the QMYSQLDriver class. In the help document I followed the example (of course I used mySQL, not Postgres):
#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"
PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");
QPSQLDriver *drv = new QPSQLDriver(con);
QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection
QSqlQuery query;
query.exec("SELECT NAME, ID FROM STAFF");
... -
Hi
Ahhh. never tried that :)it goes
#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"
QPSQLDriver *drv = new QPSQLDriver(con);So I assumed you tried with
#include "qtdir\qtbase\src\plugins\sqldrivers\mysql\qsql_mysql.cpp"
QMYSQLDriverand got errors ?
-
Yes indeed, I followed that example but for QMYSQL. I stopped right after instantiating the drv pointer because it was not recognizing the QMYSQLDriver.
-
@DoubleC122
and you changed the path to points to the mysql. cpp file ?
(the class is defined there) -
Yes, I changed everything there to go as it should. But apparently it didnt. I included just like this: #include "/home/catalin/Qt/5.9.1/Src/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp". And Qt recognizes it. I also checked if there was actually that .cpp file there just to be sure, even if it is redundant to do so.
-
@DoubleC122
and this .cpp should include the .h file and the object should be known. hmm.
Its not inside namespace or anything that would prevent it from knowing type ? -
Not really, I tried using that even in a simple non Qt project, to see if at least that would do, but it didn't. For instance, in a simple blank project, I include whatever I need, plus the mysql connector header files and the path to the .cpp. Then, in main, I have just these lines:
sql::Driver *driver; sql::Connection *con; driver = get_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); QMYSQLDriver *drv = new QMYSQLDriver(con);
And it says that #include <QtSql/private/qsqldriver_p.h> and #include <QtSql/private/qsqlresult_p.h> 'no such file or directory'. These are included in the qsql_mysql.cpp file. I certainly have those headers, since I looked a thousand times for them. If I try to include them 'manually', pretty much as I did for the qsql_mysql.cpp, it works, but I don't feel like it's a good idea also because then it moves on the other headers inside those I included and says the same error. Maybe the headers in qsql_mysql.cpp point somewhere else than where I looked for, I really have no idea.
-
Hi
I wonder if you need something like (in .pro file)
QT += gui-private
as we do for other private headers.
(looking for right name) -
@mrjj said in Problem with QMYSQLDriver:
gui-private
Unfortunately it doesnt change anything. Actually, I saw something else. If I just include the .cpp file without writing anything else, it shows me the header errors. Before, it showed me that the QMYSQLDriver was not declared in this scope, now if I just include the .cpp file, it shows me this error, which it didn't before.
-
Hi,
That would be
sql-private
. But from a quick look the plugin headers are not exported. -
So its not really possible to use a stand alone driver as the helps shows ?
or it does only apply to the QPSQLDriver ? -
Frankly now that I spent so much time on this error, I think I could use the normal QSqlDatabase class without using the connector from mysql. From what I saw it's similar to the QMYSQLDriver in the sense that I need to specify what database I want to use just like what I wanted to do before, but instead I don't use any other non qt driver in between, and of course mysql is in the list of supported connection databases so it's really good.