Access 中的 ADODB - 不会插入,但不会引发错误

Posted

技术标签:

【中文标题】Access 中的 ADODB - 不会插入,但不会引发错误【英文标题】:ADODB in Access - Will not insert, but does not raise error 【发布时间】:2014-08-22 18:07:18 【问题描述】:

过去几个小时我一直在关注这个问题——我现在认为 mysql 中存在一些微妙而狡猾的错误导致了这个问题,或者这是一个非常明显的解决方案,我只需要另一双眼睛。如有任何帮助,我将不胜感激。

我正在使用 Access 进行一些数据输入工作。我有我正在使用的表链接,但我主要通过显式 ADODB 连接来处理它们(希望这将使事务更容易并允许我使用 SELECT @@IDENTITY)。这些表位于我环境中的服务器上的 MySQL 中。

我以前做过类似的工作,但由于某种原因现在没有更新。它不会引发错误,我已经检查了 Connection 的错误属性......由于某种原因,它只是轻而易举地通过此代码而不会引发错误。被引用的表现在完全是空的,它有很多字段,但只有 2 个是必需的 - 自动编号 ID 和正在填充的字段。

任何人都可以在这里看到明显的错误吗? Option Explicit 已打开,似乎它使连接正常,否则我想在打开记录集或连接时会出错。有人有任何调试建议吗?

最后一点,代码更复杂 - 我正在尝试创建一个类来存储我的连接,以使我描述的那些事情更容易。我最糟糕的情况是我在那里做的事情,比如开始一个事务而不关闭它,导致 MySQL 出现问题。

Sub ADODBError()

    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection

    cnn.Open "driver=mysql odbc 5.2a driver;" & _
       "server=my.mysql.server;" & _
       "user=myUser;password=myPwd;" & _
       "database=callcenter"

    Dim firstDayOfWk As Date
    firstDayOfWk = #8/18/2014#

    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset

    rst.Open "WeeklyCallCenterStats", cnn, adOpenForwardOnly, adLockBatchOptimistic, adCmdTable

    With rst
        .AddNew
        .Fields("WeekStarting") = firstDayOfWk
        .Update
        .Close
    End With

End Sub

【问题讨论】:

由于您使用的是 adLockBatchOptimistic,您还记得调用 rst.UpdateBatch 吗? @Tmdean 你太棒了。我不记得以前曾经使用过它。如果您将其放入我会接受的答案中,那么我已经坚持了好几个小时了。 【参考方案1】:

当您在批处理锁定模式下打开 ADO 记录集时,您对记录集所做的更改实际上不会传输,直到您在记录集上调用 UpdateBatch。

在您的rst.Open 调用中更改锁定模式(我推荐adLockOptimistic,除非它是一个快速更改的表),或者在进行更改后调用rst.UpdateBatch

【讨论】:

以上是关于Access 中的 ADODB - 不会插入,但不会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效

删除/插入/更新Access数据库中的表

使用 JavaScript 使用 ADODB 修改 Microsoft Access 数据库

node-adodb 从 Access DB 返回空集,但 mdb-sql 有效

PHP中的COM Adodb.Connection - 绝对存在的字段上的未知字段名称

当表有 42 个字段时,为啥 .NET 中的 MS Access adodb 在字段计数中返回 34?