【发布时间】:2018-08-24 09:38:09
【问题描述】:
我有一个涉及人类遗骸的复杂数据库,因此输入数据的 Access 表单也相当复杂。我有几个子表单(Skeleton_index、Element_index 和其他一些)。我提到的两个子表单在一个未绑定的主表单上将数据发送到它们各自的字段(element_link、skeleton_link),其他表单从中使用数据。对于 Skeleton_index,用户必须输入个人的姓名,它会立即显示在 Skeleton_index 字段中。我遇到的问题是我不希望用户必须输入 Element_index 的主键数据,因为它应该是 auto_increment。这是一个问题,因为 Element_id 中的自动递增值不会立即显示在 element_link 字段中。为了让它显示,用户必须创建一个新元素,然后返回到他们正在编辑的那个。我想避免这种情况。
我想要做的是在 Element_id 文本框获得焦点时将其更新为新的 auto_increment 主键。 VBA 代码应该从 MySQL (InnoDB) Element_index 表中获取最后一个主键,添加一个,然后更新 Element_index 表单中 Element_id 字段中的值。
这是我的尝试,但完全失败了。
Private Sub Element_id_GotFocus()
SQL = "SELECT LAST_INSERT_ID();"
lastID = DoCmd.RunSQL(SQL)
newID = Int(lastID) + 1
Element_id.Value = newID
End Sub
编辑:
数据库最初只有一个用户,但未来可能会有更多。
解决方案: 我添加了一个带有两个宏的按钮:一个用于保存插入的记录,另一个用于刷新表单。无需复杂的 VBA。
【问题讨论】:
-
您是否尝试过保存记录并在一些初始数据输入后刷新以“获取”PK 号?
If Me.Dirty Then Me.Dirty = False -
您阅读了docs 和dev.mysql.com/doc/refman/8.0/en/getting-unique-id.html?我还通过首先查找 max(id) 然后递增然后插入来解决。如果没有有效的错误 ID,您的方法可能会在两次连续插入时失败。
-
哈哈!我真傻。我什至不认为刷新会是一种选择。我之前尝试保存数据并且它不会更新,但我想我所要做的就是添加刷新宏。谢谢!
标签: mysql vba forms ms-access last-insert-id