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 :

Erreur lors d'une requête d'insertion vba dans une table de liaison n:m [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Géomaticien
    Inscrit en
    Juin 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur Géomaticien

    Informations forums :
    Inscription : Juin 2011
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Erreur lors d'une requête d'insertion vba dans une table de liaison n:m
    Bonjour,

    je vous expose mon problème, pour simplifié j'ai dans ma base de donnée 3 tables :
    - table 'application' : id_app (primary-key, type : numauto), et les autres champs qui n'ont pas d'importance pour la problématique.
    -table 'departements' : id_dept (primary-key, type :texte), avec un champs nom_dept sans importance ici encore.
    - table 'affect_app_dept' : id_app (primary-key,type : numérique), id_dept (primary-key, type : texte).

    La table 'application' est reliée à la table 'affect_app_dept' qui est elle même reliée à la table 'departement', une simple relation n:m quoi.

    J'ai créée un formulaire pour remplir ces tables, une fois que l'application est renseignée dans la table 'application', je récupère sont id_app (à l'aide d'un module permettant de trouver le dernier numéroauto inséré dans la base de donnée) que j'insert dans une zone de texte (nom : 'id_app'). Je sélectionne ensuite les départements contenus dans la table 'departement' à l'aide d'une zone de liste à choix multiple (nom : 'liste_dept_selectionne'). Jusque là tous se passe bien

    Ensuite je lance une boucle vba permettant de lire l'ensemble des départements sélectionnés dans la zone de liste et lors de chaque chaque itération de la boucle j'effectue une requête SQL de type INSERT INTO dans la table affect_app_dept, dont voici le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    '--------------------------------------------------------------------------------------------------------------------------------
    'ENREGISTREMENT DE LA SELECTION DES DEPARTEMENTS DANS LA TABLE AFFECT_APP_DEPT
    '--------------------------------------------------------------------------------------------------------------------------------
     
    Private Sub enregistrer_select_dept_Click()
     
    Dim reponse As String 'création d'une variable texte pour enregistrer la réponse de la boite de dialogue
    Dim varI As Variant
    Dim SQL As String
     
    reponse = MsgBox("Etes vous sur de bien vouloir enregistrer la sélection de département pour cette application dans la base ?", vbYesNo, "ATTENTION, PAS D'ANNULATION POSSIBLE PAR LA SUITE !!")
     
    If reponse = vbYes Then
     
    'On vérifie d'abord si il y a au moins un département de sélectionné dans la zone de liste 'liste_dept_selectionne'
    If Me.liste_dept_selectionne.ItemsSelected.Count = 0 Then
    MsgBox "Merci de sélectionner au moins un département"
     
    Else
     
    'On passe en revue chacune des sélections dont on insert le numéro dans la table affect_app_dept avec l'id d'application définie  précédemment
    For Each varI In Me!liste_dept_selectionne.ItemsSelected
     
    SQL = "INSERT INTO affect_app_dept(id_app, no_dept) VALUES ('" & Me!id_app.Value & " ', ' " & Me!liste_dept_selectionne.ItemData(varI) & " ');"
     
    DoCmd.RunSQL SQL
     
    Next varI
    End If
     
    Else
     
    'message avertissant de l'annulation de l'enregistrement
    MsgBox "L'enregistrement de la sélection de département a été annulé", vbInformation
     
    End If
    End Sub
    En SQL "normal", c'est a dire directement sous forme de requete SQL (INSERT INTO affect_app_dept (id_app, id_dept) VALUES (n° de l'application à renseigner, n° du ou des départements sélectionnés) sous Access cela fonctionne mais pas lorsque je passe par le code vba.

    En effet j’obtiens un message d'erreur du type "Microsoft Access ne peut pas ajouter tout les enregistrement à la requête Ajout, 1 enregistrement(s) n'ont pas été ajoutés à la table à la suite de la violation de clé.".

    Alors mes hypothèses sont que :

    - Il y a un problème dans le format du caractère retourné par la zone de texte 'id_app', je m'explique : dans ma zone de texte j'ai bien un chiffre (ex :"6") mais il est alors sous forme de texte, et le champ 'id_app' de la table étant définit en numérique, sa bloque lors de l'insertion.
    Dans ce cas comment connaitre le format du/des caractères contenus dans la zone de texte, et le cas échéant passer d'un type texte => type numérique ?

    - Il y a un problème dans mon code, mais j'ai quand même vérifié que la boucle me retournait bien des valeurs grâce à un debug.print et c'est le cas, j’obtiens bien l'id_app contenu dans la zone texte et le premier département sélectionné dans la zone de liste (id_app = "6" et id_dept = "16" par exemple).

    - Un autre problème dont je n'aurait pas pensé ? (très possible ça ^^).

    Auriez vous une/des idées ?
    Merci d'avance.
    Florent.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    La seule erreur de syntaxe que je vois est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO affect_app_dept(id_app, no_dept) VALUES ('" & Me!id_app.Value & " ', ' " & Me!liste_dept_selectionne.ItemData(varI) & " ');"
    Comme id_app est numérique (Entier Long) il ne faut pas encadrer la valeur Me!id_app.Value par des guillemets.
    Il y a aussi un espace en trop à gauche et à droite de Me!liste_dept_selectionne.ItemData(varI).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO affect_app_dept(id_app, no_dept) VALUES (" & Me!id_app.Value & ", '" & Me!liste_dept_selectionne.ItemData(varI) & "');"
    ... n'ont pas été ajoutés à la table à la suite de la violation de clé.
    Ça peut aussi être un problème de doublon.

    A+

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Géomaticien
    Inscrit en
    Juin 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur Géomaticien

    Informations forums :
    Inscription : Juin 2011
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    C'est bon sa marche
    Merci beaucoup LedZeppII, en fait c'était juste un problème de syntaxe, dès fois il vaut mieux chercher le plus simple plutôt que d'essayer de trouver la petite bête ^^.
    Bonne journée, @+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur dans une requête d'insertion
    Par bboy_lil_mak dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/08/2013, 12h38
  2. Appeler dans une requête des variables définies dans une macro
    Par piflechien73 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/08/2009, 16h12
  3. Erreur dans une requête d'insertion
    Par monpseudonom dans le forum PL/SQL
    Réponses: 7
    Dernier message: 17/11/2008, 16h50
  4. Problème dans une requête d'insertion
    Par celica dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/09/2007, 16h28
  5. Réponses: 6
    Dernier message: 23/08/2007, 10h49

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