error open database QSqlError(“0“, “QODBC3: Unable to connect“, “[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN

本文讲述了作者在使用QT通过ODBC连接MYSQL时遇到的问题,主要是由于32位MYSQL和64位ODBC的架构不匹配。通过更换为32位ODBC并重新创建数据源,最终成功连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个大作业需要使用QT通过ODBC连接MYSQL,按网上配置后一直连接失败,折磨了我几个小时,输出错误提示:

error open database QSqlError(“0”, “QODBC3: Unable to connect”, “[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”)

后来突然发现我MYSQL下载的是32位,而ODBC是64位,所以出现不匹配情况,然后我下载了一个32位的ODBC,在32位ODBC上再重新创建数据源,终于连接成功!

打印数据库连接失败信息代码如下(需包含头文件QSqlDatabase和QSqlError):

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setHostName("127.0.0.1");
        db.setPort(3306);
        db.setDatabaseName("sqlqt");
        db.setUserName("root");
        db.setPassword("123");
        bool ok = db.open();
        if (ok){
            QMessageBox::information(this, "infor", "success");
        }
        else {
            QMessageBox::information(this, "infor", "open failed");
            qDebug()<<"error open database"<<db.lastError();//这条代码打印错误信息
        }
### 解决 QODBC 连接 MySQL 时遇到的 &#39;Microsoft ODBC 驱动程序管理器 未发现数据源名称并且未指定默认驱动程序 IM002&#39; 错误 当尝试通过 QODBC 连接到 MySQL 数据库时,如果收到错误消息 "Microsoft ODBC 驱动程序管理器 未发现数据源名称并且未指定默认驱动程序 IM002",这通常意味着配置过程中缺少必要的 DSN(Data Source Name)。以下是详细的解决方案: #### 创建和验证 DSN 设置 为了成功建立连接,必须创建一个有效的 DSN 或者确保应用程序指定了正确的连接字符串。可以通过 Windows 的 ODBC Data Sources 控制面板来进行操作。 1. 打开 **控制面板** -> **系统和安全** -> **管理工具** -> **ODBC 数据源(32位/64位)**。 2. 在弹出窗口中选择 **System DSN** 或 **User DSN** 标签页下的 **Add...** 按钮来添加新的数据源。 3. 选择适用于 MySQLODBC 驱动程序,并点击完成进入下一步配置向导。 4. 输入适当的数据源名(DSN),服务器地址(IP 地址或主机名), 用户ID 和密码等必要信息[^2]。 #### 修改 PHP 应用程序中的数据库连接代码 考虑到网站是基于 PHP 编写的,在 `php.ini` 文件里确认已加载了相应的扩展模块;另外还需调整用于访问外部资源的具体路径指向实际存在的 .mdb/.accdb 文件位置而非 Microsoft Access MDE 文件。对于直接连通 MySQL 而言,则应更改为如下形式之一: ```php <?php $dsn = &#39;mysql:host=your_host;dbname=your_database;charset=utf8mb4&#39;; $username = &#39;your_username&#39;; $password = &#39;your_password&#39;; try { $pdo = new PDO($dsn, $username, $password); } catch (PDOException $e) { echo &#39;Connection failed: &#39; . $e->getMessage(); } ?> ``` 或者利用原生函数方式实现相同功能: ```php <?php $connection = mysqli_connect(&#39;your_host&#39;, &#39;your_username&#39;, &#39;your_password&#39;, &#39;your_database&#39;); if (!$connection) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; mysqli_close($connection); ?> ``` 以上方法可以有效规避因试图解析不存在于当前环境内的特定文件而导致的问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值