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

Requêtes et SQL. Discussion :

requête VBA mise à jour et clé primaire


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut requête VBA mise à jour et clé primaire
    Bonjour à tous,

    Je bloque depuis plusieurs jours sur une requête VBA de mise à jour.

    J'ai 2 tables : une table "Matrices_carrées" avec comme clé primaire "N°" et j'ai une autre table "T_base_de_données" dans laquelle j'enregistre mes opérations effectuées sur mes outils.

    Dans la table "T_base_de_données" je peux retrouver plusieurs fois un outil avec différents nbre de coups donnés. J'ai créé une requête qui permet de faire le total de cps donnés sur un N° d'outils. Lorsque je teste la requête seule elle m'indique bien le nbre de coups total de mon outils.

    J'ai créé un code VBA car j'ai plusieurs tables en fonction des types d'outils :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Private Sub Commande44_Click()
     
    Dim db As Database
    Dim sql As String
    Dim Rs20 As DAO.Recordset
    Dim qfd20 As DAO.QueryDef
    Dim n20 As String
    Dim t20 As String
    Dim ncd20 As String
     
     
    'soluce2
    'Dim sql As String
    'DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
    '    sql = "INSERT INTO Table2(champ1, champ2) VALUES (" & nomducontrolequialavaleurduchamp1.Value & "," & nomducontrolechamp2.Value & ");"
    '    DoCmd.RunSQL sql
    '    sql = "INSERT INTO Table3(champ1, champ2) VALUES (" & nomducontrolequialavaleurduchamp1.Value & "," & nomducontrolechamp2.Value & ");"
    '    DoCmd.RunSQL sql
    '...
    'DoCmd.SetWarnings True
     
    DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
    sql = "INSERT INTO [T_base_de_données](N°_identification_outil,Abrégé_outillage,Opération, Date_suivi, Nbre_de_coups_donnés,Longueur_après_affûtage,Observations) VALUES ([Forms]![F_suivi outils]![N° outil],[Forms]![F_suivi outils]![type_outillage],[Forms]![F_suivi outils]![Opération],[Forms]![F_suivi outils]![date_suivi],[Forms]![F_suivi outils]![cps_donnés],[Forms]![F_suivi outils]![longhaut_affûtage],[Forms]![F_suivi outils]![observations])"
    DoCmd.RunSQL sql
    DoCmd.SetWarnings True
     
    'Référence la base de données
    Set db = CurrentDb
    If [Forms]![F_suivi outils]![type_outillage] = "MCAR" Then GoSub mcar
    If [Forms]![F_suivi outils]![type_outillage] = "PCAR" Then GoSub pcar
    If [Forms]![F_suivi outils]![type_outillage] = "MRON" Then GoSub mron
    If [Forms]![F_suivi outils]![type_outillage] = "PRON" Then GoSub pron
    If [Forms]![F_suivi outils]![type_outillage] = "MREF" Then GoSub mref
    If [Forms]![F_suivi outils]![type_outillage] = "PREF" Then GoSub pref
    If [Forms]![F_suivi outils]![type_outillage] = "MOBL" Then GoSub mobl
    If [Forms]![F_suivi outils]![type_outillage] = "POBL" Then GoSub pobl
    GoSub line31
     
    mcar:
    'code pour activer requête "R_cumul_cps_donnés"
    Set qfd20 = CurrentDb.QueryDefs("R_cumul_cps_donnés")
     
    '1er paramètre : permet de prendre en compte le type d'outillage dans la requête "R_cumul_cps_donnés"
            qfd20.Parameters("[Formulaires]![F_Suivi outils]![type_outillage]") = [Forms]![F_suivi outils]![type_outillage]
    '2nd paramètre : permet de prendre en compte le N° d'outil dans la requête "R_cumul_cps_donnés"
            qfd20.Parameters("[Formulaires]![F_Suivi outils]![N° outil]") = [Forms]![F_suivi outils]![N° outil]
     
    'ouvre le recordset basé sur la requête
    Set Rs20 = qfd20.OpenRecordset
     
    'Vérifie s'il y a des enregistrements dans le Recordset pour éviter message d'erreur
    If Rs20.BOF = True And Rs20.EOF = True Then GoTo line31
     
    'stocke dans les variables les données de la table sélectionnée en fonction de la requête
    Rs20.MoveFirst
    While Not Rs20.EOF
        With Rs20
            n20 = .Fields("N°_identification_outil").Value
            t20 = .Fields("Abrégé_outillage").Value
            ncd20 = .Fields("SommeDeNbre_de_coups_donnés").Value
        End With
     
            Rs20.MoveNext
    Wend
     
    sql = "UPDATE [Matrices_carrées] SET [Matrices_carrées].Nbre_de_coups_total = " & ncd20 & " WHERE [Matrices_carrées].N°= '" & n20 & "'"
    ' sql = "UPDATE [Matrices_carrées] SET [Matrices_carrées].Nbre_de_coups_total = " & ncd20 & " WHERE [Matrices_carrées].Abrégé_outillage= '" & t20 & "'"
    DoCmd.RunSQL sql
    Return
     
    pcar:
    Return
     
    mron:
    Return
     
    pron:
    Return
     
    mref:
    Return
     
    pref:
    Return
     
    mobl:
    Return
     
    pobl:
    Return
     
    line31:
    End Sub
    Lorsque j'exécute le code avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "UPDATE [Matrices_carrées] SET [Matrices_carrées].Nbre_de_coups_total = " & ncd20 & " WHERE [Matrices_carrées].N°= '" & n20 & "'"
    le débogueur s'arrête sur
    .

    Lorsque j'exécute le code avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "UPDATE [Matrices_carrées] SET [Matrices_carrées].Nbre_de_coups_total = " & ncd20 & " WHERE [Matrices_carrées].Abrégé_outillage= '" & t20 & "'"
    Tous mes outils ont le même nbre total de coups.

    Je ne vois pas pourquoi cela ne fonctionne pas avec le critère de la clé primaire.

    Un conseil serait le bien venu

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Lorsque le débogueur s'arrête sur la ligne, va dans la fenêtre exécution (Ctrl+G) et saisis
    pour afficher la valeur de la chaine de caractères sql. Ce sera une bonne piste.

    Es-tu sûr(e) qu'il faille les signes ' pour encadrer N20?

    Il faut bien entendu bien vérifier que les noms de champs sont corrects.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour Pierre Fauconnier,

    merci pour l'astuce afin de connaître le contenu du code SQL.

    Bien vu l'histoire des signes ' car il s'agissait bien de cela.

    Maintenant mon code fonctionne.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Mets un Debug.Print Sql pour voir la valeur de ton Sql.

    Regarde aussi tes déclarations. Tu déclares des String et tu les utilises apparemment sur des entiers.
    Amicalement

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

Discussions similaires

  1. Créer et éxecuter une requête de mise à jour en VBA
    Par CHARLI BONGO dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/02/2013, 12h13
  2. [AC-2002] requête de mise à jour avec code VBA
    Par sylvie dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/05/2010, 13h56
  3. [AC-2007] Code VBA d'une requête de mise à jour
    Par Crachover dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/03/2010, 19h09
  4. [VBA]Requête de Mise à jour de BDD qui ne s'exécute pas
    Par Playerz dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/06/2008, 09h48
  5. [VBA] Mise à jour à chaque frappe clavier
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 07/11/2005, 12h07

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