0

我是 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 服务器。是这样吗?如果是这样的话,如果你能给我一些关于如何继续的线索,我将不胜感激,特别是关于主机名(是 localhost?)。

另外,我不确定该文件的路径是否必须包含在 DatabaseName 中。

PS:我没有问题转移到不同类型的数据库/服务器,例如 MySQL。因此,如果您的解决方案需要这个,我会很高兴的!

提前致谢

D

4

3 回答 3

1

除非您特别需要 Jet/MS Access 格式的数据库来做其他事情,否则最好使用SQLite。Qt 具有内置的 SQLite 支持(QSQLITE 驱动程序)——您只需将其指向数据库文件即可。无需设置 ODBC 数据源或任何东西。

于 2012-10-17T20:02:11.710 回答
0

备查:

正如 Werne Strydom 所说,setDatabaseName 的参数不是数据库文件名,而是指向你的数据库的 ODBC 数据源的名称。因此,您需要创建一个指向您的数据库的 ODBC。

执行此操作的常用方法(在 Windows 中)是转到控制面板\系统和安全\管理工具\数据源 (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 的名称。

于 2012-10-18T07:04:20.090 回答
0

根据文档,您应该将 setDatabaseName 设置为 ODBC 数据源。然后将 ODBC 数据源配置为指向适当的文件。

于 2012-10-17T16:55:16.827 回答