Qt访问odbc(access)遇到的问题

背景:

我做了一个简单的库,负责与数据库交互,希望能兼容数据库类型多一些。偶然想试试access,结果调试出错了。特此记录下来。

原因:

windows中的odbc中,预制了很多基础的数据库驱动,这在2000年上大学时,做项目就研究过。

所谓驱动,无非就是一些dll,和注册表键值指向。如果要自己做个安装程序去部署客户机,对照本机开发环境,去设置注册表和复制dll即可。亲测没问题,这就是windows的机制。

qt针对odbc是统一处理的,它算一种单独的连接类型。databasename设置为odbc的dsn字符串即可。就如这样:

DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=access.mdb;Uid=;Pwd=;
 

这个串也可以用技巧自动生成的,具体忘了,大概是新建一个什么扩展名的文件,双击运行后打开odbc数据源设置界面,设置好以后,再次用记事本打开这个文件,就看到dsn字符串了。

可以先新建一个.dsn文件(文件数据源),设置好以后用记事本打开,各种属性一览无余,然后分号分割也可以拼出连接字符串。

调试出错原因在于,现在的windows内置的odbc是32位和64位两种版本,很多驱动是32位的,亦即,在32位odbc管理器中可以看到,而64位的odbc管理器中就没有。所以如果你的程序是64位的,它连接数据库时,想调用的驱动dll是32位的,就不行。

而且还有一点要注意,dsn字符串中指定的driver,必须和odbc管理器中看到的一模一样。比如access串中的驱动,是{Microsoft Access Driver (*.mdb, *.accdb)}还是{Microsoft Access Driver (*.mdb)}?一定不能错。

结论:

时代是要发展的,很多老技术默认是被淘汰的,如果真的遇到问题了,可以多一种解决思路。

相关推荐

  1. Qt访问odbc(access)遇到问题

    2024-03-22 08:06:06       38 阅读
  2. Qt6兼容Qt5遇到问题总结

    2024-03-22 08:06:06       38 阅读
  3. 前端遇到问题

    2024-03-22 08:06:06       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 08:06:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 08:06:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 08:06:06       82 阅读
  4. Python语言-面向对象

    2024-03-22 08:06:06       91 阅读

热门阅读

  1. TCP/IP协议

    2024-03-22 08:06:06       41 阅读
  2. 【TypeScript系列】模块

    2024-03-22 08:06:06       33 阅读
  3. QT常见数据类型和类的使用

    2024-03-22 08:06:06       38 阅读
  4. 【mybatis】TypeHandler解读

    2024-03-22 08:06:06       50 阅读
  5. Transformer 论文阅读笔记

    2024-03-22 08:06:06       58 阅读
  6. Superset二次开发之PostgreSQL 统计信息介绍

    2024-03-22 08:06:06       43 阅读
  7. 系统资源耗尽对服务器的影响

    2024-03-22 08:06:06       52 阅读
  8. FlinkSQL之保序任务对于Join SQL影响分析

    2024-03-22 08:06:06       33 阅读