QSqlTableModel() empty on Ubuntu but works on Windows ?
-
check the return value of
model->select();
and if it returnsfalse
usemodel->lastError()
to diagnose what's going wrongwrote on 10 Jun 2020, 18:10 last edited by@VRonin said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
check the return value of
model->select();
and if it returnsfalse
usemodel->lastError()
to diagnose what's going wrongQSqlError("", "Unable to find table logs", "")
It doesn't make sense because the table name is correct and it does exist ?
-
Hi,
Might be a silly question but are you sure that your database is properly populated under Linux ?
-
Hi,
Might be a silly question but are you sure that your database is properly populated under Linux ?
wrote on 10 Jun 2020, 19:20 last edited by R-P-H 6 Oct 2020, 19:20@SGaist said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
Hi,
Might be a silly question but are you sure that your database is properly populated under Linux ?
Hi, yes the database is actually hosted on the same machine. I have double checked it with pgadmin.
-
So the server is on a different machine ?
-
I thought about the machine running PostgreSQL.
Check the query made by the QSqlTableModel to see if there's anything suspicious.
-
I thought about the machine running PostgreSQL.
Check the query made by the QSqlTableModel to see if there's anything suspicious.
-
The one returned by the query method.
-
The one returned by the query method.
-
Looks like you are not connected to the database.
What version of Qt are you using ?
How did you install it ? -
Looks like you are not connected to the database.
What version of Qt are you using ?
How did you install it ?wrote on 11 Jun 2020, 09:24 last edited by R-P-H 6 Nov 2020, 09:26@SGaist
Qt Creator 4.11.2
Based on Qt 5.14.2 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit)I installed using the online-installer for Ubuntu x64 from Qt website.
What is strange is that I am able to access the database just fine in the same application using
QSqlQuery
. -
That's the Qt Creator version.
In any case, start your application with the QT_DEBUG_PLUGINS environment variable set to 1, it will give you more information about why the plugin does not load.
-
That's the Qt Creator version.
In any case, start your application with the QT_DEBUG_PLUGINS environment variable set to 1, it will give you more information about why the plugin does not load.
wrote on 11 Jun 2020, 09:49 last edited by@SGaist I don't see any problems in loading sql drivers:
QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers" ... QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlite.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlite.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QSQLITE" ] }, "archreq": 0, "className": "QSQLiteDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QSQLITE") QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlodbc.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlodbc.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QODBC3", "QODBC" ] }, "archreq": 0, "className": "QODBCDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QODBC3", "QODBC") QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QPSQL7", "QPSQL" ] }, "archreq": 0, "className": "QPSQLDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QPSQL7", "QPSQL") QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/sqldrivers" ... loaded library "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so" QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/accessiblebridge" ... QSqlDatabasePrivate::database: unable to open database: "FATAL: role \"(removed)\" does not exist\nQPSQL: Unable to connect"
-
@SGaist I don't see any problems in loading sql drivers:
QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers" ... QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlite.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlite.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QSQLITE" ] }, "archreq": 0, "className": "QSQLiteDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QSQLITE") QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlodbc.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlodbc.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QODBC3", "QODBC" ] }, "archreq": 0, "className": "QODBCDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QODBC3", "QODBC") QFactoryLoader::QFactoryLoader() looking at "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so" Found metadata in lib /home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInter(removed)", "MetaData": { "Keys": [ "QPSQL7", "QPSQL" ] }, "archreq": 0, "className": "QPSQLDriverPlugin", "debug": false, "version": 331008 } Got keys from plugin meta data ("QPSQL7", "QPSQL") QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/sqldrivers" ... loaded library "/home/(removed)/Qt/5.13.0/gcc_64/plugins/sqldrivers/libqsqlpsql.so" QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/Qt/5.13.0/gcc_64/plugins/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/(removed)/(removed)/build-(removed)_Demo-Desktop_Qt_5_13_0_GCC_64bit-Release/accessiblebridge" ... QSqlDatabasePrivate::database: unable to open database: "FATAL: role \"(removed)\" does not exist\nQPSQL: Unable to connect"
wrote on 11 Jun 2020, 09:54 last edited by@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
QSqlDatabasePrivate::database: unable to open database: "FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect"
I'm not an expert, but you can Google for
PSQL FATAL role
and get a fair number of hits about this "permission" issue, e.g. https://stackoverflow.com/questions/11919391/postgresql-error-fatal-role-username-does-not-exist. -
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
QSqlDatabasePrivate::database: unable to open database: "FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect"
I'm not an expert, but you can Google for
PSQL FATAL role
and get a fair number of hits about this "permission" issue, e.g. https://stackoverflow.com/questions/11919391/postgresql-error-fatal-role-username-does-not-exist.wrote on 11 Jun 2020, 09:57 last edited by@JonB said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
QSqlDatabasePrivate::database: unable to open database: "FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect"
I'm not an expert, but you can Google for
PSQL FATAL role
and get a fair number of hits about this "permission" issue, e.g. https://stackoverflow.com/questions/11919391/postgresql-error-fatal-role-username-does-not-exist.No, that is caused by the following line of code:
QSqlDatabase::addDatabase("QPSQL");
It is because at this point in the code I have not yet set the details for accessing the database. I am just loading the driver on startup. So this "error" is not the issue.
-
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect
Does
removed
match postgres ? If not, how did you create the database in the first place ? Under which role did you create it ? -
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect
Does
removed
match postgres ? If not, how did you create the database in the first place ? Under which role did you create it ?wrote on 12 Jun 2020, 09:47 last edited by R-P-H 6 Dec 2020, 09:48@SGaist No. The database is already created with a specific role that has access.
/*Somewhere in beginning of program*/ QSqlDatabase::addDatabase("QPSQL"); //Only called once
/* Later in program when accessing the database */ QSqlDatabase db = QSqlDatabase::database(); db.setHostName("localhost"); db.setPort(5432); db.setDatabaseName("test_db"); db.setUserName("test_user"); db.setPassword("test_pass");
The role with access to the db and table is "test_user", created using pgadmin4 or psql.
-
Hi, I am trying to populate a QSqlTableModel() using a table in my Postgresql database and display it in a QTableView. Here is the first part of the code:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("localhost"); db.setPort(5432); db.setDatabaseName("test_db"); db.setUserName("test_user"); db.setPassword("test_pass"); bool ok = db.open(); QSqlTableModel *model = new QSqlTableModel(nullptr, db); if (ok){ model->setTable("my_table_name_here"); model->select(); }
On Windows, this works perfectly and QTableView is populated.
However, when testing on Ubuntu 16.04 LTS the QTableView is empty. I checked the output of
model->rowCount();
and it returns '0'.A few things to note:
- Both Operating Systems are accessing the same database using the same credentials.
- On Ubuntu, using a standard
QSqlQuery
works perfectly in accessing data from the very same database in the same application. - There are no errors in opening the database or anything else related.
This really has me stumped. Why is it not working on Ubuntu ? Thanks.
wrote on 12 Jun 2020, 10:12 last edited by@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
On Ubuntu, using a standard QSqlQuery works perfectly in accessing data from the very same database in the same application.
This is what baffles me. If the problem was in the db driver, the query should fail too. I'm very confused about what's going on...
-
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
On Ubuntu, using a standard QSqlQuery works perfectly in accessing data from the very same database in the same application.
This is what baffles me. If the problem was in the db driver, the query should fail too. I'm very confused about what's going on...
wrote on 12 Jun 2020, 10:23 last edited by JonB 6 Dec 2020, 10:26@VRonin
@R-P-H has already said:QSqlDatabasePrivate::database: unable to open database: "FATAL: role "(removed)" does not exist\nQPSQL: Unable to connect"
No, that is caused by the following line of code:QSqlDatabase::addDatabase("QPSQL");
On Ubuntu, using a standard QSqlQuery works perfectly in accessing data from the very same database in the same application.So we seem to have an error at add database stage, and then
QSqlQuery
works fine but notQSqlTableModel
. But I think the OP says this does not matter (though it would worry me).check the return value of model->select(); and if it returns false use model->lastError() to diagnose what's going wrong
QSqlError("", "Unable to find table logs", "")
Should the OP try printing out what
QString QSqlTableModel::selectStatement() const
returns? And/or whatever is inQSqlQuery QSqlQueryModel::query() const
? -
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
On Ubuntu, using a standard QSqlQuery works perfectly in accessing data from the very same database in the same application.
This is what baffles me. If the problem was in the db driver, the query should fail too. I'm very confused about what's going on...
wrote on 12 Jun 2020, 11:17 last edited by@VRonin said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
@R-P-H said in QSqlTableModel() empty on Ubuntu but works on Windows ?:
On Ubuntu, using a standard QSqlQuery works perfectly in accessing data from the very same database in the same application.
This is what baffles me. If the problem was in the db driver, the query should fail too. I'm very confused about what's going on...
Yes, it makes no sense.
12/41