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

  • Auteur de la discussion breizhkar
  • Date de début

breizhkar

Nouveau membre
Bonjour,

J'ai besoin d'aide, je n'arrive pas à récuperer l'ID d'une table.
voici une parti de mon code VBA.
Code:
Private Sub cmdValider_Click()

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim filename As String
Dim sSQL As String
Dim tempreq As String

'controle des zones si bien remplie
If ztnom <> "" And ztduree <> "" And ztreal <> "" And ztacteurs <> "" And ztresume <> "" And LMsupport.Value <> 0 And LMgenre.Value <> 0 Then
    'désactivation des messages
    DoCmd.SetWarnings False
   
    'requete ajout de vidéos dans la base video
    DoCmd.RunSQL "INSERT INTO video(NomVideo,Genre,Duree,Realisateur,ActeurPrincipal,Resume,Annee) Values (ztnom,LMgenre.value,ztduree,ztreal,ztacteurs,ztresume,ztannee);"
    
      
    'sSQL = "Select MAX(Num) From video"
      
    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];"
    
    'reactivation des messages à l'utilisateur
    DoCmd.SetWarnings True

    'effacement des zones de textes
    ztnom = ""
    ztduree = ""
    ztreal = ""
    ztacteurs = ""
    ztresume = ""
    LMgenre.Value = ""
    LMsupport.Value = ""
    ztannee = ""
Else

    'messages d'erreurs
    MsgBox "Veuillez saisir toutes les informations", vbOKOnly + vbExclamation, "Ajout impossible"
End If
 
End Sub

Merci de m'aider...
Breizhkar
 

zeb

Modérateur
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)
 

breizhkar

Nouveau membre
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.
Code:
[color=000ef0]
'sSQL = "Select MAX(Num) From video"
       
    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]
 

zeb

Modérateur
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 :
Code:
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Select MAX(Num) MAX_NUMFrom video", dbOpenForwardOnly, dbReadOnly)
MsgBox rs.Fields("MAX_NUM").Value
rs.Close

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

breizhkar

Nouveau membre
: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.

Code:
Private Sub cmdValider_Click()

Dim db As Database
Dim rs As Recordset
Dim SQL As String
Dim MAX_NUM As Integer

Set rs = CurrentDb.OpenRecordset("Select MAX(Num)as MAX_NUM From video", dbOpenForwardOnly, dbReadOnly)

MsgBox rs.Fields("MAX_NUM").Value
rs.Close

'controle des zones si bien remplie
If ztnom <> "" And ztduree <> "" And ztreal <> "" And ztacteurs <> "" And ztresume <> "" And LMsupport.Value <> 0 And LMgenre.Value <> 0 Then
    'désactivation des messages
    DoCmd.SetWarnings False
   
    'requete ajout de vidéos dans la base video
    DoCmd.RunSQL "INSERT INTO video(NomVideo,Genre,Duree,Realisateur,ActeurPrincipal,Resume,Annee) Values (ztnom,LMgenre.value,ztduree,ztreal,ztacteurs,ztresume,ztannee);"
    'requete ajout de vidéos dans la base support video
    DoCmd.RunSQL "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value,MAX_NUM.Value);"
    
    'reactivation des messages à l'utilisateur
    DoCmd.SetWarnings True

    'effacement des zones de textes
    ztnom = ""
    ztduree = ""
    ztreal = ""
    ztacteurs = ""
    ztresume = ""
    LMgenre.Value = ""
    LMsupport.Value = ""
    ztannee = ""
Else

    'messages d'erreurs
    MsgBox "Veuillez saisir toutes les informations", vbOKOnly + vbExclamation, "Ajout impossible"
End If
 
End Sub
 

zeb

Modérateur
M'enfin, essaie de comprendre se que fait le code.
J'ai écris
Code:
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:
 

breizhkar

Nouveau membre
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

 

zeb

Modérateur
Code:
Set rs = CurrentDb.OpenRecordset("Select MAX(Num)as MAX_NUM From video", dbOpenForwardOnly, dbReadOnly)
    MAX_NUM = rs.Fields("MAX_NUM").Value
[..]
    MsgBox "INSERT INTO supp_video(Num_supportv,Num_Video) Values (LMsupport.Value," & MAX_NUM & ");"
    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.
 

breizhkar

Nouveau membre
merci beaucoup!
ca fonctionne.en fait j'avais oublier les " et le & dans le code
Code:
" & MAX_NUM & "

 

zeb

Modérateur
D'où l'intérêt du MsgBox qui te l'affiche en clair avant l'exécution.

Bon courage pour la suite.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 101
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut