我知道围绕这个问题提出了很多问题,我花时间尝试实施各种解决方案但没有帮助。
我正在尝试使用Qt SQLite平台读取.db文件。 Windows 8 Qt 5.3.2
在SQL浏览器中为SQLite打开db文件并执行我的简单查询成功:
SELECT Name FROM Person ORDER BY Name
并且输出中有10行的列表。
我想把它扔掉Qt。我的代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("C:\mydb.db");
if(db.open())
{
QSqlQuery qry(db);
if(qry.exec("SELECT Name FROM Person ORDER BY Name"))
{
while(qry.next())
{
//some code
}
}
QSqlError e;
QString s,d;
e = qry.lastError();
s = e.databaseText();
d = e.driverText();
}
此代码失败,qry.exec
命令返回false,最后一个错误是“没有这样的表;人”
运行命令:QStringList tables = db.tables(QSql::AllTables);
数据库打开后显示数据库中有一个名为:sqlite_master的表。
尝试使用查询替换exec命令中的查询:"SELECT tbl_name FROM sqlite_master WHERE type = 'table'"
如:http://www.sqlite.org/faq.html#q7所述
导致exec命令返回true,但qry.next()
已经从第一次迭代返回false,尽管我的数据库中有5个表。
如果能解决我的问题,我会非常满意!
感谢!!!
答案 0 :(得分:1)
您应该正确指定数据库文件的路径。您应该使用C:\mydb.db
或C:\\mydb.db
。
C:/mydb.db
这是因为编译器使用\
作为字符串中的转义字符(适用于\t
,\n
或\r
等内容。所以\\
实际上变成了\
。