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 :

Pas d'insertion dans table après requête INSERT [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut Pas d'insertion dans table après requête INSERT
    Bonjour.

    J'ai un petit soucis avec une requête d'insertion. Voici déjà le morceau de code concerné :
    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
     
                If strNomActif <> "" Then
                    ' Vérification de l'existence de l'actif
                    strRequete = "SELECT Count(id_actif) FROM T_Actif WHERE nomActif='" & strNomActif & "';"
                    Set rstEnr = dbBase.OpenRecordset(strRequete, dbOpenForwardOnly, dbReadOnly)
                    ' Si l'actif n'existe pas dans la base alors insertion
                    If rstEnr.Fields(0) = 0 Then
                        strRequete = "INSERT INTO T_Actif (nomActif) VALUES ('" & strNomActif & "');"
                        'MsgBox strRequete
                        dbBase.Execute strRequete
                    End If
     
                    ' Récupération de l'identifiant de l'actif
                    strRequete = "SELECT id_actif FROM T_Actif WHERE nomActif='" & strNomActif & "';"
                    Set rstEnr = dbBase.OpenRecordset(strRequete, dbOpenForwardOnly, dbReadOnly)
                    strIdActif = rstEnr.Fields(0)
     
                    ' Libération du recordset
                    Set rstEnr = Nothing
                Else
                    MsgBox "Actif non défini à la ligne " & intIdxLgn, vbExclamation + vbOKOnly, "Pas d'actif"
                End If
    Lorsque je lance ma macro, j'ai un plantage à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strIdActif = rstEnr.Fields(0)
    m'indiquant que le recordset est vide.
    J'ai fait une exécution pas à pas pour vérifier l'enchaînement et les valeurs des variables. La requête de vérification réussie en retournant que la table ne contient pas l'actif, la requête d'insertion est exécutée sans erreur... mais rien n'est ajouté dans la table.
    Une explication ?

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    j'essaierai plutôt :
    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
     
    If nz(strNomActif) <> "" Then
     
                    ' Si l'actif n'existe pas dans la base alors insertion
                    If dcount ("*","T_Actif","nomActif='"" & strNomActif & "'") =0 Then
                        strRequete = "INSERT INTO T_Actif (nomActif) VALUES ('" & strNomActif & "');"
                      debug.print strRequete
                        dbBase.Execute strRequete
                    End If
    dbase.tabledefs.refresh
     
                    ' Récupération de l'identifiant de l'actif
                    strIdActif = nz(dlookup("id_acti","T_Actif","nomActif='" & strNomActif & "'"))
                  debug.print strIdActif 
                Else
                    MsgBox "Actif non défini à la ligne " & intIdxLgn, vbExclamation + vbOKOnly, "Pas d'actif"
                End If
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    J'essaie ça demain. Mais ce qui me surprend c'est que j'ai d'autres opérations d'insertions, construites sur le même modèle, qui elles fonctionnent. Comme si le problème venait de la table.

  4. #4
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    C'est bon, j'ai trouvé d'où provenait le problème : la clef primaire était au format texte et pas numérique automatique contrairement à ce que je supposais. Il me fallait donc la fournir...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/01/2007, 13h06
  2. [SQL] Pb d'insertion donnée dans table, pb requête SQL
    Par PuppeT mAsTer dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/07/2006, 11h26
  3. Pb d'écriture intempestive dans table avec SQL insert into
    Par pete_shifter dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/11/2005, 11h51
  4. Insertion dans table SQL server (Trigger) Aidz moi SVP????
    Par pop bob dans le forum Développement
    Réponses: 2
    Dernier message: 30/07/2005, 23h55
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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