gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:57:26 24 4
gpt4 key购买 nike

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

上下文: 我有一个 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

错误:

Runtime error '3167': Record is deleted

看来 Access 没有提交插入记录并正确获取新 ID。

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

在 Access 上的链接表的配置中启用了 SQL_AUTO_IS_NULL

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

最佳答案

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 成功来缓解这种情况。您可以添加一个 Application.Wait (Now + TimeValue("0:00:01")) 如果您真的对此很感兴趣。

关于mysql - Access 2013 - VBA - 记录集插入获取ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com