Ajout d'un enregistrement en VBA

supadope Messages postés 6 Statut Membre -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour,
je cherche à ajouter un enregistrement en VBA sur access. Le problème c que je veut ajouter un enregistrement (NumCli) ds une table RESERVATION à partir de NomCli (entré par l'utilisateur du programme) qui se trouve ds un autre table CLIENT.
les 2 tables :
CLIENT(NumCli,NomCli)
RESERVATION(NumRes,NumCli#)
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Tu donnes trop peu d'éléments ... NumRes est-il un numéro automatique ? Si c'est le cas il suffit de faire un simple insert :
    Insert Into Reservation Values (NumCli)

    Polux
    0
    1. supadope Messages postés 6 Statut Membre
       
      oui c un numéro automatique mais sa c'est du SQL le "Insert into". je peut l'utiliser ds mon programme VBA ?
      0
  2. supadope Messages postés 6 Statut Membre
     
    en faite c'est un programme vba, j'ai cru trouver une solution mais je tombe sur une erreur qui me dit :" vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table 'concert'"
    ce message aparait dés que le programme passe sur " RESERVATION.Update"
    voila ce que j'ai fait :
    Sub programme5() 'ajout d'une réservation

    Dim cli As String
    Dim nb As Integer
    Dim conc As String
    Dim nb2 As Integer

    Dim db2 As Database
    Dim CLIENT As Recordset
    Set db2 = CurrentDb()
    Set CLIENT = db2.OpenRecordset("CLIENT")

    Dim db3 As Database
    Dim CONCERT As Recordset
    Set db3 = CurrentDb()
    Set CONCERT = db3.OpenRecordset("CONCERT")

    Dim db As Database
    Dim RESERVATION As Recordset
    Set db = CurrentDb()
    Set RESERVATION = db.OpenRecordset("RESERVATION")

    nb2 = 0
    conc = InputBox(" Nom du concert ")
    While Not CONCERT.EOF
    If CONCERT("NomConc") = conc Then
    nb2 = CONCERT("NumConc")
    End If
    CONCERT.MoveNext
    Wend
    RESERVATION.AddNew
    RESERVATION("NumConc") = nb2
    RESERVATION.Update

    nb = 0
    cli = InputBox(" Nom du client ")
    While Not CLIENT.EOF
    If CLIENT("NomCli") = cli Then
    nb = CLIENT("NumCli")
    End If
    CLIENT.MoveNext
    Wend
    RESERVATION.AddNew
    RESERVATION("NumCli") = nb
    RESERVATION.Update
    RESERVATION.Close
    CLIENT.Close
    CONCERT.Close
    MsgBox ("Nouvelle réservation ajouté")
    End Sub

    désolé je suis pas très clair dans mes explications ...
    0
    1. birdfly
       
      comment supprimer un ligne de table lies
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Combien de base de données utilise-tu ? tu as bd, db2 et db3 ??? tu ouvres 3 connexions à ta base ??? une seule suffit.
    Ensuite un champ de base se désigne comme ça : CLIENT.NumCli ou CLIENT!NumCli et non CLIENT("NumCli").
    Mets un point d'arrêt sur la ligne du While et passe le code pas à pas (touche F8) et regarde ce qui se passe dans la boucle.
    0
  4. supadope Messages postés 6 Statut Membre
     
    en faite RESERVATION contient Numres (numéro auto) NumCli (que je voudrait importé de CLIENT à partir de NomCli) et NumConc (que je voudrait importé de CONCERT à partir de NomConc)
    j'ai déjà lancé le programme pas à pas et les 2 boucles marche le message d'erreur vient après les 2 boucles sur les 2 "RESERVARTIONS.Update".
    j'utilise donc les 3 base RESERVATION , CLIENT(NumCli,NomCli) et CONCERT(NumConc,NomConc). c'est pour sa que j'ai db, db2 et db3 pour chacune des bases.
    la désignation des champs comme je l'ai fait marche normalement car je l'est utilisée ds d'autre programme qui marchent.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,
    Je pense que tu confonds base de données et tables ... une base de données contient plusieurs tables liées entre elles par des liaisons (cardinalités).
    Lorsque tu fais : Dim db As DataBase, tu déclares un objet base de données (pour faire simple), dans cette base de données, tu as 3 tables RESERVATION, CLIENT et CONCERT.
    Quand tu fais Set db = CurrentDb(), tu pointes sur ta base de données et donc sur les tables de cette base.
    Il te faut également un objet RecordSet pour aller chercher les infos dans les tables en passant une requête (commande SQL pour lire, modifier ou supprimer etc ... des items de la base).

    Imaginon que tu veuilles toutes les réservations pour un concert, la commande SQL sera :
    Select * From Reservation Where Reservation.NumConc = Concert.NumConc And Concert.NumConc = 1

    Il te faut faire dans le code :
    Dim db As DataBase
    Dim rs As RecordSet
    Set db = CurrentDb()
    rs = db.OpenRecordset("Select * From Reservation Where Reservation.NumConc = Concert.NumConc " _ 
           & "And Concert.NumConc = 1")


    Il faut ensuite parcourir le recordset pour en extraire les données ...

    polux
    0