Problem with QMYSQLDriver
-
Ok, I'll try to get into a bit more detail. Even though it shouldnt be a major factor I guess, I have a QtWidget project and in the source file, in the constructor of the mainwindow, I typed QMYSQLDriver *drv = new QMYSQLDriver(con);. The major error is that one, but I also get "drv was not declared in this scope" (which seems fine, since it doesnt even recognize QMYSQLDriver), and also "expected type-specifier before QMYSQLDriver". Not sure how much of this is helping. Also, regarding the .so file generation, pardon my ignorance, but I'm not very accustomed with makefiles and such. The .so file should be generated in the very same file? Because if so, I don't have any .so right there.
-
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.
Post 18 of 22