Выберите @@ Identity, возвращая 0 для связанной таблицы в Access - PullRequest
0 голосов
/ 11 апреля 2009

Я использую Access 2007 и у меня есть несколько связанных таблиц с базой данных MySQL. Я использую DAO для вставки записи в связанную таблицу MySQL и пытаюсь извлечь вставленный PK, используя Select @@ identity, но этот select возвращает 0.

  Dim sql As String

  Dim oDB As Database
  Set oDB = CurrentDb 

  sql = "INSERT INTO Quotes ( CustomerID ) SELECT 1 AS Expr1;" 

  oDB.Execute sql 

  If oDB.RecordsAffected <> 1 Then 
    MsgBox "cannot create new quote"
    Exit Function
  End If

  Dim rsNewID As DAO.Recordset
  Set rsNewID = oDB.OpenRecordset("SELECT @@IDENTITY")  ' Create a recordset and SELECT the new Identity

  Dim intNewID As Long
  intNewID = rsNewID(0).Value ' Store the value of the new identity in variable intNewID
  'This value is 0, why?

Я видел другой вопрос, подобный этому, , на который я не получил удовлетворительного ответа

Ответы [ 3 ]

2 голосов
/ 11 апреля 2009

SELECT LAST_INSERT_ID ()

1 голос
/ 11 апреля 2009

Фредрик получает частичный кредит за оператор MySQL. Важно отметить, что я использую DAO, поэтому операторы обрабатываются механизмом JET, и он не поддерживает этот оператор. Это должно быть выполнено как сквозной запрос в Access для работы, хотя. После того, как я сделал запрос с помощью оператора select Фредрика, он добился цели. Я вызвал этот сквозной запрос на доступ из моего кода DAO, и он сработал.

0 голосов
/ 11 апреля 2009

Я не использовал mysql. Итак, переведите то, что я говорю, для mysql.

Является ли CustomerID столбцом идентификаторов (т. Е. Генерирует ли он самостоятельно)?
Если это так, используйте функцию, которая возвращает последний созданный идентификатор.

@@ Идентификационная функция - это то, что люди используют в SQL Server. Я не знаю эквивалента в MySQL.
Смотри это

Глядя на код выше, вам не нужно открывать второй набор записей. rsNewID1 должен помочь вам получить последний вставленный идентификатор.

Надеюсь, это поможет.

...