Se connecter avec
S'enregistrer | Connectez-vous

Récuperer l'id a partir d'une requete access en VBA

Dernière réponse : dans Programmation

Bonjour,

J'ai besoin d'aide, je n'arrive pas à récuperer l'ID d'une table.
voici une parti de mon code VBA.
  1. Private Sub cmdValider_Click()
  2.  
  3. Dim db As DAO.Database
  4. Dim rst As DAO.Recordset
  5. Dim filename As String
  6. Dim sSQL As String
  7. Dim tempreq As String
  8.  
  9. 'controle des zones si bien remplie
  10. If ztnom <> "" And ztduree <> "" And ztreal <> "" And ztacteurs <> "" And ztresume <> "" And LMsupport.Value <> 0 And LMgenre.Value <> 0 Then
  11. 'désactivation des messages
  12. DoCmd.SetWarnings False
  13.  
  14. 'requete ajout de vidéos dans la base video
  15. DoCmd.RunSQL "INSERT INTO video(NomVideo,Genre,Duree,Realisateur,ActeurPrincipal,Resume,Annee) Values (ztnom,LMgenre.value,ztduree,ztreal,ztacteurs,ztresume,ztannee);"
  16.  
  17.  
  18. 'sSQL = "Select MAX(Num) From video"
  19.  
  20. DoCmd.RunSQL "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value,[color=#ff1c00]Ici je voudrais qu'apparaissennt l'ID du dernier enregistrement de video c'est à dire le dernier num automatique de la table vidéo[/color];"
  21.  
  22. 'reactivation des messages à l'utilisateur
  23. DoCmd.SetWarnings True
  24.  
  25. 'effacement des zones de textes
  26. ztnom = ""
  27. ztduree = ""
  28. ztreal = ""
  29. ztacteurs = ""
  30. ztresume = ""
  31. LMgenre.Value = ""
  32. LMsupport.Value = ""
  33. ztannee = ""
  34. Else
  35.  
  36. 'messages d'erreurs
  37. MsgBox "Veuillez saisir toutes les informations", vbOKOnly + vbExclamation, "Ajout impossible"
  38. End If
  39.  
  40. End Sub


Merci de m'aider...
Breizhkar
Lassé par la pub ? Créez un compte
Expert Programmation

Tu n'as pas un problème de VBA mais de SQL.

Il te faut faire une requête préalable pour récupérer l'ID.
Par chance, la numérotation automatique sous Access (Tu es bien sous Access ?) ne remplace pas les trous éventuels créés par une suppression, tu as donc la garantie que le dernier est le plus grand (facile pour le trouver)

Citation :
Tu n'as pas un problème de VBA mais de SQL.

Il te faut faire une requête préalable pour récupérer l'ID.
Par chance, la numérotation automatique sous Access (Tu es bien sous Access ?) ne remplace pas les trous éventuels créés par une suppression, tu as donc la garantie que le dernier est le plus grand (facile pour le trouver)


Salut!
Il me semble que j'ai déjà fait une requete pour récupérer l'ID, mais je ne sais pas comment écrire le code pour l'inscrire ensuite dans mon insert!
Effectivement, je suis bien sous ACCESS.
  1. [color=#000ef0]
  2. 'sSQL = "Select MAX(Num) From video"
  3.  
  4. DoCmd.RunSQL "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value,Ici je voudrais qu'apparaissennt l'ID du dernier enregistrement de video c'est à dire le dernier num automatique de la table vidéo;" [/color]
Expert Programmation

grrrr... Tu vas mettre ces balises [ code] oui ou m**** ?

Au temps pour moi, je n'ai pas vu la ligne select. [mode mauvaise_foi=On]C'est à cause du fait que tu n'as pas mis ces balises [ code] justement).

J'ai re-regardé ton truc et en effet, il faut connaître le truc. Tu utilises ADO ou DAO ?

Avec DAO :
  1. Dim rs As Recordset
  2. Set rs = CurrentDb.OpenRecordset("Select MAX(Num) MAX_NUMFrom video", dbOpenForwardOnly, dbReadOnly)
  3. MsgBox rs.Fields("MAX_NUM").Value
  4. rs.Close


Pour plus d'info :
1°) mettre des balises [code] dans tes 2 premiers posts....

:pt1cable: 
Désolée pour les balises...

Merci pour le code, ça fonctionne. Juste une chose, au moment de l'INSERT un message box s'ouvre en me demandant la saisie d'une valeur du MAX_NUM, du coup je suis obligée de taper le numéro qui s'est affiché avant.
Tu n'aurais pas une info pour qu'elle soit directement inserer.
Merci d'avance.. je te redonne mon code.

  1. Private Sub cmdValider_Click()
  2.  
  3. Dim db As Database
  4. Dim rs As Recordset
  5. Dim SQL As String
  6. Dim MAX_NUM As Integer
  7.  
  8. Set rs = CurrentDb.OpenRecordset("Select MAX(Num)as MAX_NUM From video", dbOpenForwardOnly, dbReadOnly)
  9.  
  10. MsgBox rs.Fields("MAX_NUM").Value
  11. rs.Close
  12.  
  13. 'controle des zones si bien remplie
  14. If ztnom <> "" And ztduree <> "" And ztreal <> "" And ztacteurs <> "" And ztresume <> "" And LMsupport.Value <> 0 And LMgenre.Value <> 0 Then
  15. 'désactivation des messages
  16. DoCmd.SetWarnings False
  17.  
  18. 'requete ajout de vidéos dans la base video
  19. DoCmd.RunSQL "INSERT INTO video(NomVideo,Genre,Duree,Realisateur,ActeurPrincipal,Resume,Annee) Values (ztnom,LMgenre.value,ztduree,ztreal,ztacteurs,ztresume,ztannee);"
  20. 'requete ajout de vidéos dans la base support video
  21. DoCmd.RunSQL "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value,MAX_NUM.Value);"
  22.  
  23. 'reactivation des messages à l'utilisateur
  24. DoCmd.SetWarnings True
  25.  
  26. 'effacement des zones de textes
  27. ztnom = ""
  28. ztduree = ""
  29. ztreal = ""
  30. ztacteurs = ""
  31. ztresume = ""
  32. LMgenre.Value = ""
  33. LMsupport.Value = ""
  34. ztannee = ""
  35. Else
  36.  
  37. 'messages d'erreurs
  38. MsgBox "Veuillez saisir toutes les informations", vbOKOnly + vbExclamation, "Ajout impossible"
  39. End If
  40.  
  41. End Sub

Expert Programmation

M'enfin, essaie de comprendre se que fait le code.
J'ai écris
  1. MsgBox rs.Fields("MAX_NUM").Value

MsgBox = Message Box.

C'est juste pour afficher dans une boîte la valeur récupérée.

Toi, au lieu de l'afficher, tu mets cette valeur dans une variable.
Variable que tu réutilises au moment de l'insert.

Tu es vraiment un débutant, toi :lol:  (Y'a pas de mal, je ne connais pas un seul prétendu gougou qui n'ait commencé newbie ;)  )

Ah j'oubliais, merci pour les balises [code]

eh ben oui débutant...
je vois très bien ce que tu veux dire par variable.
ce que j'ai fait mais cela ne fonctionne pas.
Est ce que tu pourrais me donner un coup de main en modifiant mon code que j'ai joins tout à l'heure..
parce que là, ca fait des heures que j'essaie et :fou:  :fou:  :fou: 
merci d'avance

Expert Programmation

  1. Set rs = CurrentDb.OpenRecordset("Select MAX(Num)as MAX_NUM From video", dbOpenForwardOnly, dbReadOnly)
  2. MAX_NUM = rs.Fields("MAX_NUM").Value
  3. [..]
  4. MsgBox "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value," & MAX_NUM & ");"
  5. DoCmd.RunSQL "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value," & MAX_NUM & ");"


Regarde ce que va faire la requête AVANT en ajoutant la ligne 4.
Dès que cela te convient, retire là.

Par principe et avant de chercher dans tes livres, sur google ou sur PPC, place des MsgBox ou mieux des DEBUG.PRINT un peu partout (ou encore mieux aux endroits clef) de ton programme. Ensuite tu les vires.
Lassé par la pub ? Créez un compte