Qt QODBC数据库不能打开

chunchengzz 2011-09-08 02:36:21
前提:
win xp环境; Qt SDK版本v1.1.3; 库文件版本4.7.4;
QODBC驱动已装,运行以下代码能够查看支持的驱动:
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << driver << "\t";
运行结果为:
Available drivers:
"QSQLITE"
"QODBC3"
"QODBC"

问题如下:
现在我添加一个QODBC的数据库(就用Qt帮助里面的示例程序):
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (!db.open()) {
qDebug() << "db open failed!";
}

运行结果为:
db open failed!

我尝试了网上的各种添加QODBC的方法,结果都打不开.这是为神马呢?
...全文
289 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是学友 2011-09-17
  • 打赏
  • 举报
回复
win下这个问题好解决,可是linux下这个问题很难搞,怎么搞都是读不了access数据库,没办法只能用sqlite,其实sqlite很好用,同样的数据,access的将近3M,sqlite只有400多KB,有一款软件能很好的将access转为sqlite,就是不能转中文
  • 打赏
  • 举报
回复
楼主哪有 QODBC驱动 可以下啊?给个链接吧
chunchengzz 2011-09-16
  • 打赏
  • 举报
回复
需要将相关的动态库文件放置到工作目录下面. 后来的童鞋们都记住啦
chunchengzz 2011-09-16
  • 打赏
  • 举报
回复
非常感谢楼上的详细解答! 我用你的方法可以打开数据库文件了
cgstsinghua 2011-09-08
  • 打赏
  • 举报
回复
在程序中直接连接mdb,不需要在windows中设置数据源
cgstsinghua 2011-09-08
  • 打赏
  • 举报
回复
还有你注意看下mdb文件的路径,要放到**-build-desktop下面才行!希望有用
cgstsinghua 2011-09-08
  • 打赏
  • 举报
回复
首先在.pro 中添加
QT += sql
然后下个mingw32的库安装后,找到qsqlite4.dll,qsqlited4.dll,qsqlodbc4.dll,qsqlodbcd4.dll,复制到当前工程目录**-build-desktop\debug\sqldrivers下面,即可
下面是我的部分代码:也是抄的网上的!

bool ook ;
QApplication app(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t" << driver;
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=debug\\personaldata.mdb;UID=;PWD=giveup");
ook = db.open ();
if(ook == false) {
QMessageBox::critical(0, QObject::tr("Database Error"),ldb.lastError().text ());
return false;
}
else
{
qDebug () <<"the mdb file opened ok!\n";
}
if(db.isOpen () == false) {
QMessageBox::critical(0, QObject::tr("Database Open Error"),ldb.lastError().text ());
return false;
}

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧