我是Qt的初学者,所以我的问题可能有点基础。
我的目的是使用位于我硬盘中的ODBC数据库。我试图用这段代码打开它:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("");
db.setDatabaseName("c:\\database.mdb");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
QString name1 = query.value(0).toString();
qDebug() << name1;
}
现在,问题是程序找不到数据库,在db.open()行失败。我怀疑Qt无法直接打开数据库,而是必须处理SQL服务器。是这样吗?如果是这种情况,如果你能给我一些关于如何继续的线索,我将不胜感激,特别是关于主机名(是本地主机吗?)。
另外,我不确定文件的路径是否必须包含在DatabaseName中。
PS:我没有问题转移到不同类型的数据库/服务器,例如MySQL的。所以如果你的解决方案需要这个,我会很高兴的!
提前致谢
d
答案 0 :(得分:1)
除非您特别需要Jet / MS Access格式数据库,否则最好使用SQLite。 Qt内置了SQLite支持(QSQLITE驱动程序) - 您只需将其指向数据库文件即可。无需设置ODBC数据源或任何其他内容。
答案 1 :(得分:0)
根据documentation,您应该将setDatabaseName设置为ODBC数据源。然后,将ODBC数据源配置为指向相应的文件。
答案 2 :(得分:0)
供将来参考:
正如Werne Strydom所说,setDatabaseName的参数不是数据库文件名,而是指向数据库的ODBC数据源的名称。因此,您需要创建指向数据库的ODBC。
执行此操作(在Windows中)的常用方法是转到Control Panel \ System&amp;安全\管理工具\数据源(ODBC)。但是,如果您使用的是64位计算机并希望使用32位驱动程序,请转到C:\ windows \ SysWOW64并运行odbcad32.exe
执行此操作时,将打开一个对话框(无论64/32位如何,都会显示相同的对话框)。在这里,您可以创建ODBC,为其命名并将其链接到您的实际数据库。就我而言,当我使用本地数据库时,我使用了“用户DNS”选项卡。
然后,在Qt中,您将该ODBC名称作为setDatabaseName的参数。它的工作原理! (或者它为我做了......)
新代码看起来像:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("localhost");
db.setDatabaseName("MyDataSource");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
QString name1 = query.value(0).toString();
qDebug() << name1;
}
其中“MyDataSource”是我给ODCB的名称。