【问题标题】:Retrieve AutoNumber value of last inserted row in MySQL database from MS Access always returns 0从 MS Access 检索 MySQL 数据库中最后插入行的自动编号值始终返回 0
【发布时间】: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 是否有效,但这并不能解决核心问题。

标签: mysql vba ms-access


【解决方案1】:

不了解 MySQL,但这适用于 Access 和 SQL Server:

Dim Records As DAO.Recordset
Dim Id      As Long

Set Records = CurrentDb.OpenRecordset("Select Top 1 * From Table_X")

With Records
    .AddNew
        !colA.Value = colAVal
        !colB.Value = colBVal
        !colC.Value = colCVal
    .Update
    .Bookmark = .LastModified
    Id = !Id.Value
    .Close
End With

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 2010-12-10
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多