我是否需要SQL服务器才能使用Qt的QtSql库?

时间:2012-10-17 16:47:38

标签: c++ sql qt qtsql

我是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

3 个答案:

答案 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的名称。

相关问题