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 :

probleme requete SQL dans VBA


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 11
    Points
    11
    Par défaut probleme requete SQL dans VBA
    Bonjour,
    j'ai un message d'erreur lors de l'execution d'un procédure dans VBA que je n'arrive pas à résoudre. Pouvez vous m'aider svp ?
    Le message est "erreur d'execution 3049"

    En fait l'objectif de cette procédure est de
    effacer les données contenues dans une table (Wbudgetgroup) puis de copier les données contenues dans une requete (Wpricinggroup) et de les coller dans la table (Wbudgetgroup). ensuite je complete un champ par le calcul grace au code qui suit.

    j'effectue cela la premiere fois, _ça fonctionne_ ensuite je refait la meme chose mais pour copier les donnes de la requete (Wpricinggroup) dans une autre table (Wbudgetunitgroup)
    et là ça me met erreur 3049.

    pouvez vous m'aider, y a t il dans la repétition de ce processus qq chose qui manque ?
    Merci pour votre retour,
    Cdlt

    ci dessous le code utilisé



    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    '*********************************************
    'effectue la meme opération opur generer le comparateur de prix graphique
    '*********************************************************DoCmd.SetWarnings False    'bloque les messages d'avertissement
    DoCmd.RunSQL "DELETE * FROM Wbudgetgroup;"
    DoEvents
    DoCmd.RunSQL " INSERT INTO Wbudgetgroup SELECT * FROM Wpricinggroup;"
    DoCmd.SetWarnings False
     'calcul du prix de chaque livraison en automatique
     'concerne le traitement de la requete budgetgroupreq pour les flux groupage
     
        Set rst = CurrentDb.OpenRecordset("Wbudgetgroupreq", dbOpenDynaset, dbDenyWrite)
        Application.DBEngine.SetOption DAO.dbMaxLocksPerFile, 50000
     
     
        With rst
            .MoveLast
            .MoveFirst
            For I = 1 To .RecordCount   ' Il existe d'autre moyens pour
                                        ' passer sur tous les enregistrements
                .Edit
                If !poids <= 3000 Then
                    If !poids <= 1500 Then
                        If !poids <= 1000 Then
                            If !poids <= 500 Then
                                If !poids <= 100 Then
                                    If !poids <= 90 Then
                                        If !poids <= 80 Then
                                            If !poids <= 70 Then
                                                If !poids <= 60 Then
                                                    If !poids <= 50 Then
                                                        If !poids <= 40 Then
                                                            If !poids <= 30 Then
                                                                If !poids <= 20 Then
                                                                    If !poids <= 10 Then
                                                                    !prixauto = !prixkg10
                                                                    GoTo wlasuite
                                                                    End If
                                                                !prixauto = !prixkg20
                                                                GoTo wlasuite
                                                                End If
                                                            !prixauto = !prixkg30
                                                            GoTo wlasuite
                                                            End If
                                                        !prixauto = !prixkg40
                                                        GoTo wlasuite
                                                        End If
                                                    !prixauto = !prixkg50
                                                    GoTo wlasuite
                                                    End If
                                                !prixauto = !prixkg60
                                                GoTo wlasuite
                                                End If
                                            !prixauto = !prixkg70
                                            GoTo wlasuite
                                            End If
                                        !prixauto = !prixkg80
                                        GoTo wlasuite
                                        End If
                                    !prixauto = !prixkg90
                                    GoTo wlasuite
                                    End If
                                !prixauto = !prixkg100
                                GoTo wlasuite
                                End If
                            !prixauto = !prixkg500 / 100 * !poids
                            GoTo wlasuite
                            End If
                        !prixauto = !prixkg1000 / 100 * !poids
                        GoTo wlasuite
                        End If
                    !prixauto = !prixkg1500 / 100 * !poids
                    GoTo wlasuite
                    End If
                !prixauto = !prixkg3000 / 100 * !poids
                GoTo wlasuite
                End If
     
    wlasuite:
     
                .Update
                .MoveNext
            Next I
        End With
     
        Set rst = Nothing
        MsgBox ("la requete Wbudget pour les flux GROUPAGE a été mise a jour pour générer le graphique comparateur de prix groupage")
     
    '*********************************************************'effectue la meme opération opur generer le comparateur de prix UNITAIR E GROUPAGE
    '*********************************************************DoCmd.SetWarnings False    'bloque les messages d'avertissement
    DoCmd.RunSQL "DELETE * FROM Wbudgetunitgroup;"
    DoEvents
    DoCmd.RunSQL " INSERT INTO Wbudgetunitgroup SELECT * FROM Wpricinggroup;"
    DoCmd.SetWarnings False
     'calcul du prix de chaque livraison en automatique
     'concerne le traitement de la requete budgetgroupreq pour les flux groupage
     
        Set rst = CurrentDb.OpenRecordset("Wbudgetunitgroup", dbOpenDynaset, dbDenyWrite)
        Application.DBEngine.SetOption DAO.dbMaxLocksPerFile, 50000
     
     
        With rst
            .MoveLast
            .MoveFirst
            For I = 1 To .RecordCount   ' Il existe d'autre moyens pour
                                        ' passer sur tous les enregistrements
                .Edit
                If !poids <= 3000 Then
                    If !poids <= 1500 Then
                        If !poids <= 1000 Then
                            If !poids <= 500 Then
                                If !poids <= 100 Then
                                    If !poids <= 90 Then
                                        If !poids <= 80 Then
                                            If !poids <= 70 Then
                                                If !poids <= 60 Then
                                                    If !poids <= 50 Then
                                                        If !poids <= 40 Then
                                                            If !poids <= 30 Then
                                                                If !poids <= 20 Then
                                                                    If !poids <= 10 Then
                                                                    !prixauto = !prixkg10 / !poids
                                                                                                                              GoTo wlasuite
                                                                    End If
                                                                !prixauto = !prixkg20 / !poids
                                                                GoTo ulasuite
                                                                End If
                                                            !prixauto = !prixkg30 / !poids
                                                            GoTo ulasuite
                                                            End If
                                                        !prixauto = !prixkg40 / !poids
                                                        GoTo ulasuite
                                                        End If
                                                    !prixauto = !prixkg50 / !poids
                                                    GoTo ulasuite
                                                    End If
                                                !prixauto = !prixkg60 / !poids
                                                GoTo ulasuite
                                                End If
                                            !prixauto = !prixkg70 / !poids
                                            GoTo ulasuite
                                            End If
                                        !prixauto = !prixkg80 / !poids
                                        GoTo ulasuite
                                        End If
                                    !prixauto = !prixkg90 / !poids
                                    GoTo ulasuite
                                    End If
                                !prixauto = !prixkg100 / !poids
                                GoTo ulasuite
                                End If
                            !prixauto = !prixkg500 / 100
                            GoTo ulasuite
                            End If
                        !prixauto = !prixkg1000 / 100
                        GoTo ulasuite
                        End If
                    !prixauto = !prixkg1500 / 100
                    GoTo ulasuite
                    End If
                !prixauto = !prixkg3000 / 100
                GoTo ulasuite
                End If
     
    ulasuite:
     
                .Update
                .MoveNext
            Next I
        End With
     
        Set rst = Nothing
        MsgBox ("la requete WUNIT GRoupage  pour les flux GROUPAGE a été mise a jour pour générer le graphique comparateur de prix groupage")
     
    End Sub

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    C'est quoi l'erreur 3049 ?

    Sur quelle ligne se produit-elle ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Cela n'a rien à voir avec l'erreur, mais utilise un SELECT CASE plutôt que ton ensemble de IF et plus besoin de GOTO et une étiquette.

    Philippe

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    l'erreur se produit sur la ligne 92. Il effectue l'action DELETE correctement mais ensuite il se plante en erreur 3049 lorsqu'il doit effectuer l'action INSERT INTO.
    merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Erreur 3049
    En complément voici le détail du message qui s'affiche
    : Erreur 3049: "Impossible d'ouvrir la base de donnée " ",ce n'est peut etre pas une base de donnée que votre application reconnait ou le fichier est peut etre endommagé"

    merci pour votre aide

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 11
    Points
    11
    Par défaut solution
    après lecture des post du forum j'ai fait un compactage de la base de donnée qui est passée de 2,097 Go à 156 Mo et elle fonctionne de nouveau normalement.

    Merci à Philipe pour le SELECT CASE. Je vais modifier mon code prochainement pour le simplifier.

    merci pour vos contributions

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

Discussions similaires

  1. [AC-2010] Requete SQL dans VBA
    Par angel50 dans le forum VBA Access
    Réponses: 8
    Dernier message: 11/01/2014, 16h32
  2. [AC-2007] Agregation requete SQL dans VBA avec combobox
    Par kimai dans le forum VBA Access
    Réponses: 5
    Dernier message: 22/03/2011, 04h23
  3. probleme requete SQL dans un block PL/SQL
    Par zinabd dans le forum PL/SQL
    Réponses: 4
    Dernier message: 17/02/2009, 17h20
  4. probleme requete SQL dans un block PL/SQL
    Par zinabd dans le forum PL/SQL
    Réponses: 15
    Dernier message: 14/01/2009, 16h22
  5. compter avec une requete SQL dans VBA
    Par michael1971 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/01/2008, 09h20

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