如何在MS Access中执行查询时保留主键的自动编号



我试图在查询中做以下事情:

Dim rs As RecordSet
Dim NewPrimaryKey as Long
Set rs = Currentdb.OpenRecordset("SELECT * FROM MyTable WHERE MyPrimaryKey Is Null;")
With rs
      .AddNew
      NewPrimaryKey = !MyPrimaryKey
      !DateValue = Now()
      ...
      .Update
End With

关于如何使用我可以使用JET引擎在MS Access 2003中执行的查询来做到这一点的任何指针都将非常感谢。

您可以使用两个SQL语句来完成我认为您想要的。首先是INSERT。然后"SELECT @@Identity"获取最后添加的自动号码值。为两个SQL语句的数据库连接使用对象变量。

Dim db As DAO.Database
Dim NewPrimaryKey As Long
Dim strInsert As String
strInsert = "INSERT INTO MyTable ([DateValue])" & vbCrLf & _
    "VALUES (Now());"
Set db = CurrentDb
db.Execute strInsert, dbFailOnError
NewPrimaryKey = db.OpenRecordset("SELECT @@Identity")(0)
Debug.Print NewPrimaryKey
Set db = Nothing

我把字段名DateValue用方括号括起来,因为它是一个保留字。

Edit:如果你用一条SQL语句插入多个记录,SELECT @@Identity仍然会给你最后一个自动编号。它是通过该连接实例执行的插入的最后一个自动编号。你不会得到所用的自动编号的序列;只有最后一个。

strInsert = "INSERT INTO MyTable3 ([some_text])" & vbCrLf & _
    "SELECT TOP 3 foo_text FROM tblFoo" & vbCrLf & _
    "WHERE foo_text Is Not Null ORDER BY foo_text;"

相关内容

  • 没有找到相关文章

最新更新