Как сохранить AutoNumber первичного ключа при выполнении запроса в MS Access? - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь сделать что-то вроде следующего в запросе:

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

Любые указатели о том, как выполнить его с помощью запроса, который я могу выполнить в MS Access 2003 с использованием механизма JET, будутс благодарностью.

1 Ответ

2 голосов
/ 26 июля 2011

Вы можете использовать два оператора SQL для выполнения того, что, я думаю, вы хотите. Сначала ВСТАВКА. Затем «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 в квадратные скобки, потому что это зарезервированное слово.

Редактировать : Если вы вставляете несколько записей одним оператором 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;"
...