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

VBA Access Discussion :

Problème d'insertion dans une table


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut Problème d'insertion dans une table
    Bon voilà... Cette fois j'ai bien analysé mon problème...

    J'ai un formulaire : "Fiche_Activite" qui doit me permettre d'ajouter une nouvelle activité dans la table "Activite"

    Dans cette table "Activite", Il y a le Numéro d'activité (Type Numéro Auto), le Libellé de l'activité (type texte) et un Numéro de métier (type numérique).
    Ce numéro de métier est une clé étrangère venant de la table "Métier"

    Sur le formulaire j'ai une liste déroulante permettant de choisir un métier :

    Requête : SELECT Metier.LibMetier, Metier.NumMetier FROM Metier;

    Puis une zone de texte permettant d'entrer le nom de la nouvelle activité.

    J'ai rajouté un bouton de commande : "Enregistrer" pour insérer le nouvel enregistrement dans la table "Activite"

    Voilà mon code :

    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
    Private Sub Commande19_Click()
    'Declaration des variables
    Dim bd As Database
    Dim rs As Recordset
     
    'Sélection de la BDD
    Set bd = CurrentDb
    Set rs = bd.OpenRecordset("Activite", DB_OPEN_DYNASET)
     
    'Ajout de l'enregistrement
    rs.AddNew
    rs![NumActivite] = Me.NumActivite
    rs![LibActiv] = Me.LibActiv
    rs.Update
    rs.MoveLast
    End Sub

    Erreur d'execution '3201' : Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table "Metier"


    En cliquant sur "Debogage", la ligne rs.Update est surlignée.

    Je sais que mon code n'est pas complet mais je ne connais pas la solution sachant que je n'ai jamais travaillé sur VBA ACCESS.
    En esperant que quelqu'un puisse m'aider, je vous souhaite une bonne journée !
      0  0

  2. #2
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Ton code est fonctionnel.
    L'erreur vient de tes tables. Tu as sans doute une clé étrangère dans la table en question, que tu es obligé de renseigner. Donc, il te faut remplit la table qui a un lien avec la table dans laquelle tu veux insérer l'enregistrement, avant de remplir cette dernière.
    Sinon, tu as la possibilité de mettre à jour les enregistrements en cascade, en faisant clic droit sur ta relation, et en cochant l'option
      0  0

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Non la table "Metier" contient 2 champs : "NumMetier" & "LibMetier". Il n'y a rien a modifier dans cette table pour insérer une nouvelle activité...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Ajout de l'enregistrement
    rs.AddNew
    rs![NumActivite] = Me.NumActivite
    rs![LibActiv] = Me.LibActiv
    rs![NumMetier] = Me.NumMetier
    rs.Update
    rs.MoveLast
    J'ai rajouté la ligne écrite en gras. Maintenant un nouveau message d'erreur apparaît :

    "Erreur d'execution '3022' :
    Modifications non effectuées : risque de doublons dans champ index, clé principale ou relations interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou réindexer l'index pour permettre les doublons et recommencez.


    Sur débogage, idem rs.Update est surligné. Mais quelque chose m'intrigue : Pourquoi parle t-il de modifications alors que moi je veux insérer ?!?

    J'ai mis a jour les enregistrements en cascade entre la table "Activité" & "Metier", même si je ne sais pas trop à quoi ça sert ^^.

    Je viens de voir que si j'enlevait rs.Update , l'enregistrement s'insérait dans la table mais pas à la suite, mais sur un autre enregistrement (notamment le premier de la table)
      0  0

  4. #4
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Alors en fait, quand tu ajouteras un enregistrement dans une table possédant un ou plusieurs clés étrangères, les valeurs des tables liées seront mises à jour à partir de ce que tu as ajouté dans ta table initiale.
    Tu as compris ?
    Sinon, je t'ai trouvé des infos, ici : http://www.cathyastuce.com/access/relations_fen.htm
    et tu en trouveras aussi sur le forum, je pense

    Edit : Ce que je voulais dire pour ton souci d'ajout, c'est que quand tu ajoute une activité, tu dois aussi renseigner un numéro de métier qui correspond à un métier qui existe dans ta table Métier.
    Le mieux, pour éviter l'erreur que tu as eue, c'est de faire une zone de liste dans laquelle l'usilisateur va choisir un métier parmi ceux déjà présents dans la BDD. Pour cela, tu place une requète de type "SELECT * FROM Métier;" dans la rubrique Contenu de ta zone de liste
      0  0

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Tu es vraiment gentil C'es rare quelqu'un qui s'occupe des autres comme ça !

    J'ai compris maintenant à quoi servait les mise à jour en cascades. C'est très bon à savoir et utile !

    As tu vu mon Edit de mon post d'avant ?

    Je viens de voir que si j'enlevait rs.Update , l'enregistrement s'insérait dans la table mais pas à la suite, mais sur un autre enregistrement (notamment le premier de la table)

    Le problème est donc résolu en partie vu que cette fois elle s'insère... Même si je veux pas qu'elle efface un autre enregistrement !
    Tu aurais une idée pour que l'enregistrement s'insère à la suite des autres ?

    J'ai déjà une liste modifiable avec tous les métiers existants dans la base de données ^^
      0  0

  6. #6
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Je ne pense pas qu'enlever ton Update soit la bonne solution.
    D'ailleurs, il est normalement obligatoire pour un AddNew
    As-tu lu l'édit de mon dernier post ?
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  2. Problème d'insertion dans une table Access
    Par tribaleur dans le forum ASP
    Réponses: 21
    Dernier message: 27/06/2006, 08h20
  3. Problème d'insertion dans une table filtrée.
    Par charlie289 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 16h45
  4. [MySQL] Problème d'insertion dans une table
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 17h43
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34

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