IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Enregistrement requis dans la table


Sujet :

IHM

  1. #1
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut Enregistrement requis dans la table
    Bonjour,

    Je suis novice en Access !

    Je m'exerce avec une base comportant 3 tables :
    - TClients (IdClient, ...)
    - TVendeurs (IdVendeur, ...)
    - TAchats (IdAchat, ClientId, VendeurId, ...)

    Les IdXxxx sont des NumAuto et sont clefs primaires de leur table.

    Les relations entre les tables sont :
    - TClients.IdClient 1,n TAchats.ClientId
    - TVendeurs.IdVendeur 1,n TAchats.VendeurId

    Je récupère les valeurs IdClient et IdVendeur d'un premier formulaire FIdentification dans un formulaire FAchats à partir de VBA (valeurs passées en OpenArgs). Jusque là, ça semble marcher !

    Problème, lorsque j'essaie d'enregistrer le formulaire FAchats dans la table correspondante TAchats, j'obtiens le message d'erreur :
    Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table associée 'TAchats'.
    Merci de votre éclairage :
    - y-a-t-il un problème de lien entre table ?
    - y-a-t-il un autre problème de conception de la base ?
    - existe-t-il une astuce pour régler ce type de problème ?

    +++ MERCI +++

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour.

    Votre formulaire FIdentification est-il basé sur la table TAchats?
    D'autre part, vous évoquez l'utilisation d'OpenArgs. Dans quel cadre? Quel est le code VBA? Dans quel évenement?


    Pierre

  3. #3
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Bonsoir,


    1) Non : FIdentification contient 2 listes déroulantes remplies par 2 requêtes, renvoyant l'expression <Nom + " " + Prenom> ainsi que la valeur Id associée pour chacune des 2 tables TClients, et TVendeurs.

    FIdentification contient un bouton de commande avec la procédure événementielle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub CmdOuvrirFAchats_Click()
    On Error GoTo Err_CmdOuvrirFAchats_Click
     
        Dim stDocName As String
     
        stDocName = "FAchats"
        ' Modifiable 1 et 2 = listes déroulantes
        DoCmd.OpenForm stDocName, , , , , , CStr(Me.Modifiable1) & "," & CStr(Me.Modifiable3) 
        ' Peut-être existe-t-il une meileure façon de passer 2 variables en argument ?
        ' J'ai essayé de passer un tableau() AS String, mais ==> échec ???
     
     
    Exit_CmdOuvrirFAchats_Click:
        Exit Sub
     
    Err_CmdOuvrirFAchats_Click:
        MsgBox Err.Description
        Resume Exit_CmdOuvrirFAchats_Click
     
    End Sub

    2) Je récupère la valeur dans FAchats par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Form_Open(Cancel As Integer)
     
      Dim tArg() As String
     
      If IsNull(Me.OpenArgs) Then
          'rien à faire
      Else
          tArg = Split(Me.OpenArgs, ",")
     
          ' Voilà ce que j'ai trouvé de mieux pour remplir les 2 Champs:
          Me.ClientId.ControlSource = "= """ & CLng(tArg(0)) & """"
          Me.VendeurId.ControlSource = "= """ & CLng(tArg(1)) & """"
          ' ce code fonctionne ! enfin je suppose, puisque les valeurs 
          ' s'affichent correctement à l'écran dans le formulaire  
      End If
     
     
    End Sub
    3) Le formulaire FAchats est par contre basé entièrement sur la table correspondante TAchats.

    Merci pour votre aide ...

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    J'avoue ne pas trop saisir vos pérégrinations.

    Dites moi si je me trompe.
    Vous avez d'un côté un formulaire achat.
    De l'autre vous avez un formulaire indépendant (basé sur aucune table) nommé identification.

    Dans ce formulaire Identification, vous voulez entrer les valeurs Vendeur et CLient, que vous passez en argument à l'ouverture du formulaire achat, pour les inclure dans la table Achat. Est-ce cela?

    Si oui, moi j'aurais fait tout bêtement, un formulaire basé sur la table achat, avec une liste déroulante pour les deux champs ClientId et VendeurId .

    Pierre

  5. #5
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    @pierre:
    J'avoue ne pas trop saisir vos pérégrinations.
    C'est probablement parce que je suis novice en la matière ! et que je cherche à me compliquer la vie !!

    Dites moi si je me trompe.
    Vous avez d'un côté un formulaire achat.
    De l'autre vous avez un formulaire indépendant (basé sur aucune table) nommé identification.
    C'est cela.

    Dans ce formulaire Identification, vous voulez entrer les valeurs Vendeur et CLient, que vous passez en argument à l'ouverture du formulaire achat, pour les inclure dans la table Achat. Est-ce cela?
    Toujours Oui !

    Si oui, moi j'aurais fait tout bêtement, un formulaire basé sur la table achat, avec une liste déroulante pour les deux champs ClientId et VendeurId .
    En fait je voulais trouver une astuce pour masquer les champs ClientId et VendeurId dans le formulaire FAchat pour gagner en visbilité vue le nombre d'info qui doivent y figurer ...

    Faut-il que je supprime les relations 1,n des champs IdXxx entres les tables TClients et TVendeurs et la table TAchats ? Risque de perte de l'intégrité ? Qu'en pensez-vous ? Ou y-a-t-il une autre façon de transmettre ce type de données ?

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Me.ClientId.ControlSource = "= """ & CLng(tArg(0)) & """"
    Me.VendeurId.ControlSource = "= """ & CLng(tArg(1)) & """"
    Ce n'est pas le controlsource qu'il faut modifier mais la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          Me.ClientId= CLng(tArg(0))
          Me.VendeurId= CLng(tArg(1))

  7. #7
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    J'ai déjà essayé cette solution (d'ailleurs beaucoup plus simple), mais j'obtiens ce message d'erreur :

    Microsoft Visual Basic

    Erreur d'exécution '-2147352567 (80020009)':

    Impossible d'attribuer une valeur à cet objet.
    Le code que j'ai finalement employé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.ClientId.ControlSource = "= """ & CLng(tArg(0)) & """"
    Me.VendeurId.ControlSource = "= """ & CLng(tArg(1)) & """"
    me permet d'afficher dans un Edit les valeurs récupérées. Le problème est l'impossibilité de sauvegarder l'enregistrement ??

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Arf je m'en doutais un peu parce qu'à ce stade, le formulaire ne doit pas encore être en mode édition.

    L'évènement le plus approprié est load et non open.

    Autre piste, si vraiment ça coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.ClientId.DefaultValue= CLng(tArg(0))
    Me.VendeurId.DefaultValue= CLng(tArg(1))

  9. #9
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    @Tofalu :
    Merci pour l'aide, malheureusement ça ne marche pas !!

    Jai mis la procedure dans le Open puis dans le Load,
    J'ai essayé Me.ClientId.DefaultValue, Me.ClientId, et Me.ClientId.ControlSource ainsi que les Me.VendeurId correspondants ... toujours le même message d'erreur !

    Je crois que je vais modifier mon idée d'IHM de départ ...
    à moins que

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2017, 16h57
  2. [AC-2010] Probléme "enregistrements associés requis dans la table"
    Par Chris3180 dans le forum Access
    Réponses: 2
    Dernier message: 09/01/2014, 15h25
  3. Réponses: 2
    Dernier message: 12/05/2006, 12h00
  4. supprimer un enregistrement vide dans une table oracle
    Par shurized dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/09/2004, 16h55
  5. URGENT - Nombre d'enregistrements différents dans une table
    Par Jeankiki dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/08/2004, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo