Это в основном предположение, поскольку ваш код неверен по многим причинам, включая сообщения об ошибках.
Наиболее вероятная проблема заключается в том, что путь к файлу просто неверен, или пользовательзапуск вашего приложения с не имеет соответствующих разрешений на файл и / или каталог.(Примечание: файлы и каталоги чувствительны к регистру в Linux.)
perror
следует использовать только после вызова системной функции, которая фактически завершилась ошибкой и которая устанавливает errno
, когда это происходит.Qt этого не делает.
Пожалуйста, попробуйте запустить это и обновите ваш вопрос, если вы все еще не можете решить вашу проблему:
void MainWindow::func()
{
// Note: no pointer!
QSqlDatabase accounts_db = QSqlDatabase::addDatabase("QSQLITE");
accounts_db.setDatabaseName("/home/user/xyz.db");
if (!accounts_db.open())
{
qDebug() << "Could not open database file:";
qDebug() << accounts_db.lastError();
return;
}
// Note: don't construct queries before you have a database!
QSqlQuery query;
if (!query.exec("select accno,branchcode,fname,lname,curbalance,accdate from accounts"))
{
qDebug() << "Query failed:";
qDebug() << query.lastError();
return;
}
while(query.next()) {
QString str = query.value(0).toString();
std::cerr << qPrintable(str) << std::endl;
}
}
(я даже не пытался скомпилировать это,так что, YMMV.)
Посмотрите также примеры SQL и посмотрите, как они там все это обрабатывают.