我是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
发布于 2012-10-18 07:04:20
供将来参考:
正如Werne Strydom所说,setDatabaseName的参数不是数据库文件名,而是指向数据库的ODBC数据源的名称。因此,您需要创建一个指向数据库的ODBC。
通常的方法(在Windows中)是转到控制面板\系统和安全性\管理工具\数据源(ODBC)。但是,如果您使用的是64位计算机,并且希望使用32位驱动程序,请转到C:\windows\SysWOW64并运行odbcad32.exe
执行此操作时,将打开一个对话框(无论64/32位如何,相同的对话框)。在这里,您可以创建ODBC,为其命名并将其链接到实际的数据库。在我的例子中,因为我使用的是本地数据库,所以我使用了"User 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-17 20:02:12
除非您特别需要Jet/MS Access格式的数据库用于其他用途,否则最好使用SQLite。Qt具有内置的SQLite支持(QSQLITE驱动程序)-您只需将其指向数据库文件即可运行。不需要设置ODBC数据源或其他任何东西。
发布于 2012-10-17 16:55:17
根据documentation,您应该将setDatabaseName设置为ODBC数据源。然后将ODBC数据源配置为指向适当的文件。
https://stackoverflow.com/questions/12939269
复制