2011-12-16 77 views
0

我将数据从我的vb.net应用程序插入msaccess数据库。我们如何获得msaccess查询中的最后一个插入记录

我很困惑的获取最后插入的记录添加到表的方式。在MS-SQL中,我们获得了@@ IDENTITY,但它在MSAccess中并不适用于我。

那么应该如何获取最后插入的记录添加到表中?

+0

你是什么意思没有工作?如果您创建了一个对象并针对该对象执行查询,则可以使用@@ identity。 http://stackoverflow.com/questions/2082427/how-to-retrieve-last-autoincremented-value-in-ms-access-like-identity-in-sql-s,http://stackoverflow.com/questions/ 5942781/select-identity-not-scoped-by-db-object等。 – Fionnuala 2011-12-16 15:56:37

回答

6

实施例:

Dim db As Database 
Set db = CurrentDb 

db.Execute "INSERT INTO Table1 (atext) Values('abc')", dbFailOnError 

Dim rs As dao.Recordset 

Set rs = db.OpenRecordset("select @@identity") 
Debug.Print rs(0) 

它要求有在桌子上自动增量键。

-1

拥有数字(甚至自动增加)主键总是一个好习惯。然后,您可以随时选择MAX,这是最新插入的记录。

+0

hmm听起来很有趣...但是如果两个用户在运行select语句之前同时插入记录会怎样... – KoolKabin 2011-12-16 14:35:42

+0

您不能依赖于自动递增主键而只是唯一的,如果顺序很重要,您需要构建您的拥有,然后你为多个用户进行各种有趣的工作。 – Fionnuala 2011-12-16 15:58:30

+0

@KoolKabin:存储创建该记录的用户名,以便在“创建者”等于当前用户的情况下获得MAX。不理想,但更好。理想的解决方案是迁移到SQL Server Express(它是免费的)。 – HardCode 2011-12-16 16:59:58

0

Access比SQL Server更复杂,因为访问不支持在批处理或输出参数中执行多个语句。

根据MSDN documentation,您需要为RowUpdated事件添加处理程序。然而,在采取这一措施之前,我会尝试在事务中包装插入代码,然后在事务中执行select @@ identity方法。可能不行,但值得一试。

0

据我所知,MS Access不具备获取最后添加行的功能。

实际上,我创建了一个自动增量列(反正通常是主键)。然后我运行此查询时,我渴望得到的最后一排表:

SELECT TOP 1 * FROM [Table] ORDER BY [IdColumn] DESC 

它只需以相反的顺序ID列排序表中的行和采取的第一个(这是真的表中的最后一行)。

相关问题