我试图在查询中做以下事情:
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;"