MySQL 存储过程通过 MS Access (VBA) 中的 ADODB 的输出参数在一台计算机上正确,在另一台计算机上随机

2024-01-10

我已经尝试了(几乎)一切方法来隔离问题,但我迷失了。

我有一个 MS Access 应用程序,它使用 ADODB 连接到本地 MySQL 数据库。我将其复制到一台新计算机,但现在存储过程的输出参数每次都包含一个随机值(如果通过 ADODB 完成)。在MySQL WorkBench中执行时,输出参数正确。

以下是两台计算机的规格:

  1. old:Windows 7 Pro、Office 2010 ProPlus、MySQL ODBC 5.3.4、MySQL server 5.6.22(均为 64 位;还安装了 32 位 ODBC);
  2. new:Windows 10 Pro、Office 2016 ProPlus、MySQL ODBC 5.3.6、MySQL server 5.7.16(均为 64 位,除了 MS Office;还安装了 32 位 ODBC)。

为了隔离问题,我使用了以下简单的存储过程:

CREATE PROCEDURE `testit`(
    OUT iTest INT(11))
BEGIN
    SET iTest = 123;
END

测试 MS Access 数据库仅包含以下 VBA 代码(以及对 Microsoft ActiveX Data Objects 6.1 库的引用):

Public Function dbTestIt() As Long

Dim dbConn As ADODB.Connection
Dim dbCmd As ADODB.Command

    'Open new connection
    Set dbConn = New ADODB.Connection
    dbConn.ConnectionString = "Driver={MySQL ODBC 5.3 Ansi Driver};option=3;database=xxx;user=root;password=yyy;"
    dbConn.Open

    'Execute new command
    Set dbCmd = New ADODB.Command
    With dbCmd
        Set .ActiveConnection = dbConn
        .CommandTimeout = 0
        .CommandType = adCmdStoredProc
        .CommandText = "testit"
        .Parameters.Append dbCmd.CreateParameter("iTest", adInteger, adParamOutput)
        .Execute
        dbTestIt = dbCmd.Parameters.Item(0).Value
    End With

    'Close Connection
    dbConn.Close

End Function

以下是测试结果:

  1. On the old计算机,dbTestIt() 总是返回 123;
  2. On the new计算机,dbTestIt() 返回随机值(例如 51, 1936020585, 1);
  3. 如果我从new计算机上的 MySQL 服务器old计算机(在连接字符串中使用 server=192.168.1.x),它也总是返回 123;
  4. 这告诉我问题(仅)存在于MySQL服务器 on the new计算机(对吗?);
  5. 但是,如果我随后从old计算机上的 MySQL 服务器new电脑上,它也总是返回123!

所以问题似乎出在组合上的组件new计算机,但是哪个以及为什么?以及如何测试呢?

有人有什么好主意吗?


为了进一步定位问题原因,我将新电脑上的MySQL ODBC驱动程序5.3.6降级到版本5.3.4(旧电脑上也是如此)现在可以了!为了确认确实是这个原因,我再次升级到5.3.6版本,又失败了。

因此,看起来 MySQL ODBC 驱动程序 5.3.6(8 个月前发布!)在处理(本地)MySQL Server 5.7.16 的输出参数时存在问题,可能仅与 ADODB 和 Windows 10 结合使用。

所以目前我将使用 5.3.4 版本并向 MySQL 报告错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 存储过程通过 MS Access (VBA) 中的 ADODB 的输出参数在一台计算机上正确,在另一台计算机上随机 的相关文章

  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 通过触发器应用表的列权限

    现在 我有一个名为 Members 的表 其中包含内容 分为联系人数据 银行数据 现在 管理员应该能够创建 更新 删除用户 这些用户保存在另一个表中 该表只能访问管理员 用户应该获得自己的 mysql 用户帐户 管理员还应该能够设置权限 例
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作
  • SELECT NULL、*、NULL、NULL 中令人困惑的 SQL 错误

    的背景我试图解决第四个现实任务 https www hackthissite org playlevel 4 在 hackthissite org 中 无法确切地弄清楚我应该在 URL 中注入什么 SQL 来检索电子邮件列表 浪费了几个小时
  • 如何从MySQL数据库获取今天/昨天的数据?

    我想从数据库中检索今天的数据 但我不知道该怎么做 我实际上想要获取不是过去 24 小时的数据 我只想获取今天的数据 因此基于实际服务器时间 我还想获取昨天的数据 谁能帮我怎么做 示例代码 SELECT id FROM folk WHERE
  • WHERE 值不在(子查询)

    我一直在努力解决这个问题 我有两张桌子 一张带有优惠券和发票号码的 一张带有发票号码和客户姓名的 我需要找到尚未使用优惠券的顾客 以下是表格 促销表 Promotions Invoice Coupon 1 couponA 2 couponB
  • 如何获取日期时间字段的 UTC?

    我正在使用 MySQL 5 并且正在尝试将日期时间字段转换为 UTC TIMESTAMP 这是我所拥有的 但它不起作用 并且不确定我是否可以做到这一点 但有人可以告诉我我做错了什么吗 谢谢 我已经尝试过这个 SELECT UTC TIMES
  • MySQL为每个组创建带有序列号的视图

    我在此网站上看到了类似的解决方案 但由于变量使用限制 它在视图中不可用 在MySQL中为每个组生成序列 https stackoverflow com questions 30118096 generating sequence for e
  • 如何将自托管 WordPress 和已安装的实时站点插件升级到最新可用版本而不遇到任何麻烦?

    我必须升级正在运行的 WordPress 网站的 WordPress CMS 和一些已安装的插件 并且我想要升级的一些插件之前已被修改以实现某些目标 http easycaptures com fs uploaded 288 9522279

随机推荐