Mysql Access 2013-VBA-记录集插入获取ID

Mysql Access 2013-VBA-记录集插入获取ID,mysql,ms-access,vba,Mysql,Ms Access,Vba,以前也有人问过类似的问题,我做了很多搜索,但没有找到合适的解决方案 上下文:我有一个access数据库,其中包含大量用于处理按钮按下、表单等的VBA。该数据库是一个多用户系统,以前使用SharePoint列表在所有不同实例之间同步数据 我们已经从SharePoint迁移到MySQL数据库,因为我们打算将其他应用程序与该数据库集成,而这些应用程序与SharePoint不兼容 注意:这不是此代码出现的唯一时间。因此,能够全局地修复它,而不是实现存储过程之类的功能将是更好的: 代码: Private

以前也有人问过类似的问题,我做了很多搜索,但没有找到合适的解决方案

上下文:我有一个access数据库,其中包含大量用于处理按钮按下、表单等的VBA。该数据库是一个多用户系统,以前使用SharePoint列表在所有不同实例之间同步数据

我们已经从SharePoint迁移到MySQL数据库,因为我们打算将其他应用程序与该数据库集成,而这些应用程序与SharePoint不兼容

注意:这不是此代码出现的唯一时间。因此,能够全局地修复它,而不是实现存储过程之类的功能将是更好的:

代码:

Private Sub Command102_Click()
    Dim myID As Long
    Dim R As Recordset
    Set R = CurrentDb.OpenRecordset("SELECT * FROM `Awesome Table`") 'An Access Linked Table
        R.AddNew
        R![DateField 3] = Now
        R.Update
        R.Bookmark = R.LastModified
        myID = R!ID ' Causes Error
        R.Close
    Set R = Nothing
    DoCmd.OpenForm "awesomeForm", acNormal, , "[ID] = " & myID, acFormEdit
End Sub
错误:

运行时错误“3167”:记录已删除

Access似乎没有提交插入记录并正确获取新ID

系统详细信息:
客户
-Windows 7
-Access 2013
-ODBC驱动程序版本5.3 服务器 -MySQL 5.5 -Ubuntu 14.01.1

SQL\u AUTO\u IS\u NULL在Access上的链接表配置中启用

不必编辑代码将是一个巨大的好处,因为这是一个大型数据库,有许多insert语句依赖于此

Private Sub Command102_Click()
Dim myID As Long
Dim R As Recordset
Dim dtNow as variant
Set R = CurrentDb.OpenRecordset("SELECT * FROM [Awesome Table]", dbOpenDynaset) 'Jet doesn't like tick marks.
    R.AddNew
    dtNow = Now()
    R![DateField 3] = dtNow
    R.Update
    'R.Bookmark = R.LastModified
    R.Close
  Set R = Nothing
DoCmd.OpenForm "awesomeForm", acNormal, , "[DateField 3] = #" & dtNow & "#", acFormEdit
EndSub

Now()也会返回秒数,因此发生冲突的可能性很小-尽管如果您处于高吞吐量多用户环境中,这可能是一个问题。但即使是这样,也可以通过使[Datefield 3]成为唯一的值字段并简单地循环直到.AddNew成功来缓解。您可以添加一个应用程序。如果您真的对它有兴趣,请稍候(现在+时间值(“0:00:01”)。

那么,为了澄清,“AwesomeTable”实际上是一个通过Access链接到MySQL的表?是的,它是表上唯一的关键字段-update opIs ID和DateField 3?ID是自动递增字段吗?你有没有试过选择max ID然后添加1?PK是ID,还有很多其他字段;DateField 3不是键,确切地说,“记录被删除”是在什么时候触发的?当您访问LastModified属性或ID属性时?这会导致在R发生错误。更新:错误“3146”:OBDC--调用失败检查MySQL数据类型中的[DateField 3],并确保没有其他必需字段。您可能还需要它是CurrentDb.OpenRecordset(“SELECT*FROM[Awesome Table]”,dbOpenDynaset)。