【发布时间】:2011-12-10 16:45:14
【问题描述】:
我对 QT 和 SQLite DBMS 非常陌生。我正在尝试在 ubuntu Linux 下打开使用“sqlite3”命令行程序创建的现有数据库。我尝试使用以下代码在 QT 下访问的同一数据库:
void MainWindow::func()
{
QSqlQuery query;
accounts_db = new QSqlDatabase();
*accounts_db = QSqlDatabase::addDatabase("QSQLITE");
perror("? ");
accounts_db->setDatabaseName("/home/user/xyz.db");
QSqlError *a = new QSqlError();
*a = accounts_db->lastError();
perror(a->text().toLatin1());
if (!accounts_db->open()) {
perror("database open error :");
}
if ( !accounts_db->isOpen() ) {
perror("database is not open");
}
query.exec("select accno,branchcode,fname,lname,curbalance,accdate from accounts");
while(query.next()) {
QString str = query.value(0).toString();
std::cerr << qPrintable(str) << std::endl;
}
end:
;
}
这会失败并出现以下错误...
No such file or directory
: Invalid argument
QSqlQuery::exec: database not open
请注意,在 adddatabase() 之后我得到“没有这样的文件或目录”,不知道它在谈论哪个文件。还要注意 isOpen() 和 open() 返回“true” (???)。 “数据库未打开”错误来自 db.exec() 调用(......我想......)。
急需指导...
【问题讨论】:
-
如果数据库打开正确,检查exec的结果。然后使用 lastError() 进行检查。
-
我确实这样做了,exec() 调用打印出 database not open 错误,这是我在问题中发布的第三个错误(如上)。而 lastError() 返回 Invalid argument 错误。