2009-04-11 7 views
0

J'utilise Access 2007 et j'ai des tables liées à une base de données mySQL. J'utilise DAO pour insérer un enregistrement dans une table liée mySQL et en essayant de récupérer le PK inséré en utilisant l'identité Select @@, mais sélectionnez retourne 0.Sélectionnez @@ Identité renvoyant 0 pour la table liée dans Access

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? 

Je l'ai vu another question like this, qui n'a pas été satisfaisante répondu pour moi

Répondre

1

fredrik obtient un crédit partiel, pour la déclaration mySQL. Il est important de noter que j'utilise DAO, donc les instructions sont traitées par le moteur JET et ne supporte pas cette instruction. Cela doit être exécuté comme une requête de passage dans Access pour fonctionner. Après avoir fait une requête de passage avec l'instruction select de fredrik, cela a fait l'affaire. J'ai appelé cette requête Access passthrough à partir de mon code DAO et cela a fonctionné.

+0

content que je pourrais aider! :) – fredrik

0

Je n'ai pas utilisé mysql. Alors, traduis ce que je dis pour mysql.

Est-ce que CustomerID est une colonne d'identité (c'est-à-dire génère-t-elle une identification par elle-même)?
Si c'est le cas, utilisez la fonction qui renvoie le dernier ID généré.

@@ La fonction d'identité est ce que les gens utilisent dans SQL Server. Je ne connais pas d'équivalent en mysql.
Voir this

En regardant le code ci-dessus, vous n'avez pas besoin d'ouvrir le 2ème jeu d'enregistrements. Le rsNewID1 devrait vous aider à obtenir le dernier ID inséré.

Espérons que cela aide.

2

SELECT LAST_INSERT_ID()

+0

Pour une raison quelconque, cela ne fonctionne pas avec Access. Je ne pense pas qu'Access puisse utiliser les fonctions dorsales dans une requête s'il ne s'agit pas d'une requête PassThrough. Il me dit qu'il ne peut pas trouver la fonction "Last_Insert_ID()" –

+1

Avez-vous essayé comme un passthrough? –

Questions connexes