当前位置: 首页 > 知识库问答 >
问题:

使用Access和ODBC驱动程序从MySQL获取最后一次自动增量

方季同
2023-03-14

我有一个MS Access前端和一个通过ODBC连接的MySQL后端。

我在网上查了一下,很多人都有同样的问题,但我仍然找不到正确的答案。我查看了stackoverflow和官方文件:http://dev.mysql.com/doc/connector-odbc/en/connector-odbc-usagenotes-functionality-last-insert-id.html

SELECT LAST_INSERT_ID()on access只返回undefined function last\u insert\u id()

使用时:SELECT*FROM tbl,其中auto为空 我将tbl替换为我的表格名称,将auto替换为我的表格ID(表格的主键),它显示:您输入的设置对该属性无效。有没有办法插入最后一个ID?还是我应该放弃并找到另一种方法来获取身份证?

谢啦


共有3个答案

华展鹏
2023-03-14

如果ID是自动递增字段,则以下操作将起作用:

SELECT TOP 1 ID FROM tbl ORDER BY ID DESC
龙德海
2023-03-14

如果另一个用户同时插入记录,它不起作用corrcetly.best方法是使用存储程序返回添加新记录的id(在多用户应用程序中)

CREATE PROCEDURE dbo.AddAsset

  @Name VARCHAR(500),
  @URL  VARCHAR(2000),
  @new_identity INT = NULL OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

INSERT dbo.Assets(Name, URL) SELECT @Name, @URL;
SET @new_identity = SCOPE_IDENTITY();

END 
GO

然后在前端使用这个sp

宓茂才
2023-03-14

这取决于插入记录的方式。

如果您使用的是记录集,那么这将起作用:

Dim rstRec        As DAO.Recordset
Dim lngNewID      As Long

Set restrec = CurrentDb.OpenRecordset("dbo_customers3", dbOpenDynaset, dbSeeChanges)
rstRec.AddNew
rstRec!FirstName = "Albert"
rstRec.Update
rstRec.Bookmark = rstRec.LastModified
lngNewID = rstRec!ID
rstRec.Close

因此,对于记录集,必须使用书签(因为更新会将记录指针从插入的记录中弹出来——editRecord不会这样做)

如果您使用SQLINSERT语句,那么对于MySQL,推荐的方法是您最初给定的语法。当然,你不能不使用Access sytanx。简单的更改是,您使用MySQL语法,因此您需要使有问题的查询通过(并确保设置记录=yes(这应该是将查询转换为通过的情况)。

如果有多个用户,在数据库中使用SELECT TOP是一个非常糟糕的主意。

因此,您将以下语句放在传递查询中。

SELECT LAST_INSERT_ID();

然后在VBA代码中,您可以:

Dim strSQL        As String
Dim lngNewID      As Long

strSQL = "INSERT into dbo_customers3 (FirstName, LastName) VALUES ('Albert', 'Kallal')"
CurrentDb.Execute strSQL
lngNewID = CurrentDb.OpenRecordset("QryPassReturn")(0)

无论其他用户是否插入到此表中,甚至如果在上述两个语句之间的时间内其他用户插入,上述操作都将“返回”您的会话的lastID。

 类似资料:
  • 问题内容: 我正在尝试获取类似mysql_insert_id()的mysql命令;它检索最后插入的行的auto_increment ID。我该怎么做才能在Java中获得它? 我的姓氏声明为INT。我不知道在rs.get中使用什么以及参数。 问题答案: 尝试使用别名

  • 问题内容: 我目前正在为大学的一个班级做项目。我正在学习有关连接和操作数据库的信息,我们正在使用Microsoft .accdb文件。 这是我到目前为止所拥有的。 当寻找“ sun.jdbc.odbc.JdbcOdbcDriver”时,我得到以下输出。 似乎很容易解决。看来我想念司机或类似的东西。但是,我很难找到解决方法。JDK随附驱动程序吗?我需要单独下载吗?是否取决于我的操作系统?(Mac O

  • 2:在odbcDriverConnect(con,...)中:ODBC连接失败 如果在64位R(R console或Rstudio)中运行,将返回以下错误: 警告消息:1:在odbcDriverConnect(con,...)中:[RODBC]错误:状态IM003,代码160,由于系统错误126:找不到指定的模块,无法加载消息指定的驱动程序。(Microsoft Access驱动程序(*.mdb,

  • 我需要将升级到。 Microsoft网站有以下信息: sqljdbc41.jar ;类库提供了对JDBC4.0 API的支持。它包括JDBC4.0驱动程序的所有特性以及JDBC4.0 API方法。不支持JDBC 4.1(将引发异常“SQLFeaturenotSupportedException”)。 因此,已经在java中运行的JDBC API将正常工作。 但是,Microsoft ODBC驱动程

  • 我正尝试使用WinApp驱动程序在Visual Studio 2017中自动化扩展(WPF)的UI,但在使用inspect.exe(Windows SDK)捕获元素时找不到自动化id 最初,当通过inspect.exe检查时,找不到自动化ID。因此,我在XAML文件的automation属性中设置了automation id,并将新的VSIX安装回Visual Studio中,但在捕获元素时,上述

  • TL;DR:同时使用Hive和MySql JDBC有问题吗? 我正在开发一个应用程序,它使用MySql JDBC驱动程序执行多个SQL查询,然后它还使用Hive JDBC发送另一个Hive查询。 现在发生的情况是,MySql查询正常工作,当代码尝试执行配置单元查询时,它会抛出以下异常: 现在,在抛出这个异常之后,查询将正确执行。 我的猜测是,由于我同时加载了MySql和Hive驱动程序,MySql