0
我處於sqlite以及QT的開始階段。 QtSDK IDE下有很多用於sqlite數據庫的例子。這是一個例子摘錄:無法在QT中打開sqlite3數據庫
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return false;
}
這工作得很好。但如果我試圖取代「:記憶:」與實際sqlite3的數據庫文件,...
void MainWindow::on_pushButton_5_clicked()
{
QSqlQuery query;
accounts_db = new QSqlDatabase();
*accounts_db = QSqlDatabase::addDatabase("QSQLITE"); perror("");
accounts_db->setDatabaseName("/home/aditya/test.db.sqlite");
QSqlError *a = new QSqlError();
*a = accounts_db->lastError();
perror(a->text().toLatin1());
if (!accounts_db->open()) {
perror("database open error :");
QMessageBox::critical(0,qApp->tr("db.open\n"),a->text(),QMessageBox::Cancel);
goto end; // quit if not successful
}
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:
;
}
...我就不是那麼幸運了。不確定lastError()是如何工作的,但無論如何都試過。我得到這些錯誤...
No such file or directory
: Invalid argument
QSqlQuery::exec: database not open
我已經嘗試更改有關的文件和文件夾的權限,不同的論壇上建議,但沒有結果。請注意,我正在使用Ubuntu Linux(如果有問題),我還使用sqlite3命令行程序測試了這個test.db數據庫文件,該文件完美無瑕。 任何指導表示讚賞...謝謝。
編輯:
非常抱歉,我完全忘了解釋錯誤是什麼...:|
我不知道什麼是錯,但你可以嘗試通過使用lastError函數來弄清楚它嗎? (http://doc.qt.nokia.com/stable/qsqldatabase.html#lastError) – Michel
我嘗試過,但無法打印任何錯誤。無論如何,perror會爲我的數據庫文件打印「No such file or directory」。我也嘗試將數據庫放在我的主目錄中,如此處所示(http://www.developer.nokia.com/Community/Wiki/CS001504_-_Creating_an_SQLite_database_in_Qt),但這似乎也不起作用... – aditya
我有當它說「沒有這樣的文件或目錄」時,不知道哪個文件在說什麼......任何人? – aditya