Mariadb query returns empty strings
-
wrote on 28 Jul 2018, 08:49 last edited by
Hi
I'm trying to get my head around model/view. Following a set of tutorials to create a Login form which then opens a second form, which allows the user to interact with the database.
Having had success with a Sqlite database I decided to recreate the program using an identical database created in Mariadb(using the "QMYSQL" database connector). This works fine until I try to load data into a combobox and a listbox. Instead of a list of names I get a list containing 4 empty strings.I'm using Manjaro Linux
My code is:
Connection:
bool connOpen()
{// mydb = QSqlDatabase::addDatabase("QSQLITE");
// mydb.setDatabaseName("/home/gary/dbhome/employeeTest.db");
mydb = QSqlDatabase::addDatabase("QMYSQL");
mydb.setHostName("localhost");
mydb.setDatabaseName("employeeTest");
mydb.setPassword("Password1");if(!mydb.open()) { qDebug()<<"Failed to open database!!"; return false; } else { qDebug()<<"Connection OK"; return true; } }
Action:
void EmployeeInfo::on_btnLoad_clicked()
{
Login conn;
QSqlQueryModel* model = new QSqlQueryModel();conn.connOpen(); QSqlQuery* qry = new QSqlQuery(conn.mydb); qry->prepare("select name from employee_tbl"); qry->exec(); model -> setQuery(*qry); ui->lstNames->setModel(model); ui->cbxNames->setModel(model); conn.connClose(); qDebug()<< model->rowCount();
}
the debug line gives an output of 4
Any Ideas? -
Hi,
You should use the QSqlQueryModel::lastError method. to know what is happening.
From the looks of it, you should not be calling the exec method of your QSqlQuery object. Also, there's no need to allocate it on the heap. Take a look at the setQuery documentation.
-
Hi,
You should use the QSqlQueryModel::lastError method. to know what is happening.
From the looks of it, you should not be calling the exec method of your QSqlQuery object. Also, there's no need to allocate it on the heap. Take a look at the setQuery documentation.
wrote on 29 Jul 2018, 09:19 last edited by@SGaist Hi thanks for the reply. I've tried using last error, but no error is being generated..
-
@SGaist Hi thanks for the reply. I've tried using last error, but no error is being generated..
wrote on 29 Jul 2018, 09:34 last edited by@Gosport_gaz You're right about using the query exec method. The script works by setting the query as an argument to the setModel method. However the result is the same.
-
By the way, why are you closing the connection to the database ?
-
@Gosport_gaz You're right about using the query exec method. The script works by setting the query as an argument to the setModel method. However the result is the same.
wrote on 30 Jul 2018, 07:04 last edited by@Gosport_gaz
If I were you and needed to debug this:- Don't call
qry->exec();
prior toQComboBox::setModel()
. - Don't call
conn.connClose();
prior to outputtingmodel->rowCount();
(just in case). - You are sharing the same model across 2 widgets. Comment one of them out (just in case).
- Use debugger/print statements to see what is actually being returned by the
SELECT
statement.
- Don't call
-
wrote on 30 Jul 2018, 08:16 last edited by
Thanks JonB, It seems that connClose() is the problem. Or more specifically the line 'mydb.removeDatabase(QSqlDatabase::defaultConnection);'. It seems that this only affects the server/client database (as I've tried it with PostresSql with the same results.)
I'm not sure why this doesn't affect Sqlite.
1/7