【发布时间】:2023-03-31 16:35:01
【问题描述】:
我正在尝试从表 X 中最近输入的记录中获取自动编号 ID。我最初使用 MS Access 数据库作为后端,以下 VBA 代码插入了该行并检索了正确的 ID:
Dim db As DAO.Database
Set db = CurrentDb
Dim qdf As DAO.QueryDef
Dim strSql As String
Dim id as long
strSql = "INSERT INTO Table_X (colA, colB, colC)" _
& " VALUES ([colA_val], [colB_val], [colC_val])"
Set qdf = db.CreateQueryDef(vbNullString, strSql)
With qdf
.Parameters("colA_val").Value = colAVal
.Parameters("colB_val").Value = colBVal
.Parameters("colC_val").Value = colCVal
.Execute dbFailOnError
End With
id = db.OpenRecordset("SELECT @@IDENTITY")(0)
但是,我将 MS Access 后端移至 MySQL 后端,并使用 ODBC 将 MS Access 前端连接到它。现在,这段代码运行没有错误,但它每次都返回 0 作为 ID。我手动检查了Table_X自动编号ID字段中的条目,ID设置为800(例如)。
为什么在我从 MS Access 后端切换到 MySQL 后端后,id = db.OpenRecordset("SELECT @@IDENTITY")(0) 不再返回正确的 ID?
我也试过这个:id = qdf.OpenRecordset("SELECT @@IDENTITY")(0) 但这给了我以下错误:
3421:数据类型转换错误。
总而言之:如何在通过 ODBC 连接到 MySQL 后端的 MS Access 前端中获取最近插入记录的自动编号字段?
PS。我尝试了以下链接:Autonumber value of last inserted row - MS Access / VBA,但 DAO 方法是我目前使用的方法,但不起作用。
**编辑:**
从上面的链接中,我尝试使用 ADO 和 DAO 来插入记录并返回自动编号 ID。每次插入记录都有效,这意味着连接成功。但是,检索最后插入记录的自动编号对这两种方法都不起作用。这是我使用的 ADO 方法:
cn.Execute "INSERT INTO TheTable.....", , adCmdText + adExecuteNoRecords
Set rs = cn.Execute("SELECT @@Identity", , adCmdText)
Debug.Print rs.Fields(0).Value
就像我说的,插入适用于 ADO 和 DAO,所以我知道连接是有效的。
【问题讨论】:
-
该引用问题中接受的答案显示 ADO 记录集选项。你试过了吗?
-
@June7 我的问题更关心为什么当前的解决方案会因 DAO 而失败。此外,更受欢迎的答案使用 DAO 而不是 ADO,这就是我所指的。我会看看 ADO 是否有效,但这并不能解决核心问题。