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 Project Discussion :

Erreur OLE DB a l'éxécution d'une requête


Sujet :

VBA Project

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 221
    Points : 88
    Points
    88
    Par défaut Erreur OLE DB a l'éxécution d'une requête
    Bonjour

    J'ai fait un macro qui permet de mettre à jour une base en fonction de mon planning;
    Ma base est sous SQL Server

    Voici ma requête

    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
     
    requete = "UPDATE " & cnx.getBase & ".MACHINEFL"
                    requete = requete & " SET ZPLADEB_0=?"      'Date debut de la tâche ActiveProject.Tasks(i).Start
                    requete = requete & " ,ZPLAFIN_0=?"         'Date de fin de la tâche ActiveProject.Tasks(i).Finish
                    requete = requete & " ,ZPLAEXE_0=?"          'Exercice iExercice
                    If pValide Then
                        requete = requete & ",ZPLAVALINT_0 = 2"
                    End If
                    requete = requete & " WHERE LOT_0=?"            'Lot ActiveProject.Tasks(i).Text2
                    requete = requete & " AND YNUMLIG_0=?"          'N° de ligne ActiveProject.Tasks(i).Text3
                    requete = requete & " AND ZPLAVALINT_0 <> 2 "
     
                    With cmd
                        .CommandText = requete
                        'Date de début
                        Set pm = .CreateParameter("dateDebut", adDate, adParamInput, 15)
                        pm.Value = ActiveProject.Tasks(i).Start
                        .Parameters.Append pm
     
                        'Date de fin
                        Set pm = .CreateParameter("dateFin", adDate, adParamInput, 15)
                        pm.Value = ActiveProject.Tasks(i).Finish
                        .Parameters.Append pm
     
                        'Exercice
                        Set pm = .CreateParameter("exercice", adVarChar, adParamInput, 15)
                        pm.Value = iExercice
                        .Parameters.Append pm
     
                        'Lot
                        Set pm = .CreateParameter("lot", adVarChar, adParamInput, 15)
                        pm.Value = ActiveProject.Tasks(i).Text2
                        .Parameters.Append pm
     
                        'N° de ligne
                        Set pm = .CreateParameter("ligne", adVarChar, adParamInput, 15)
                        pm.Value = ActiveProject.Tasks(i).Text3
                        .Parameters.Append pm
                    End With
     
     
                    'On Error GoTo erreurrequete
                    cmd.Execute requete, iAffected, adCmdText And adExecuteNoRecords
    Lors de l'exécution de la requête j'ai le message suivant :

    Erreur d'exécution -214721887
    Une opération OLE DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE DB disponible. Aucun travail n'a été effectué.
    Si je modifie la façon de faire (sans passer par les parameters), ça fonctionne mais je veux passer par les parameters pour une question de performances.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    requete = "UPDATE " & cnx.getBase & ".MACHINEFL"
                    requete = requete & " SET ZPLADEB_0='" & ActiveProject.Tasks(i).Start & "'"
                    requete = requete & " ,ZPLAFIN_0='" & ActiveProject.Tasks(i).Finish & "'"
                    requete = requete & " ,ZPLAEXE_0='" & iExercice & "'"
                    If pValide Then
                        requete = requete & ",ZPLAVALINT_0 = 2"
                    End If
                    requete = requete & " WHERE LOT_0='" & ActiveProject.Tasks(i).Text2 & "' AND YNUMLIG_0='" & ActiveProject.Tasks(i).Text3 & "'"
                    requete = requete & " AND ZPLAVALINT_0 <> 2 "

    Merci pour votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 221
    Points : 88
    Points
    88
    Par défaut
    J'ai exactement la même erreur avec un select

    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
    requete = ""
                requete = "SELECT ZPLAVALINT_0 as validationInterne FROM " & cnx.getBase & ".MACHINEFL "
                requete = requete & " WHERE LOT_0=?"          ' ActiveProject.Tasks(i).Text2
                requete = requete & " AND YNUMLIG_0=?"          ' ActiveProject.Tasks(i).Text3
     
                'Initialisation des paramètres
                With cmd
     
                    .CommandText = requete
                    'Numéro du lot
                    Set pm = .CreateParameter("lot", adVarChar, adParamInput, 15)
                    pm.Value = ActiveProject.Tasks(i).Text2
                    .Parameters.Append pm
     
                    'Numéro de ligne
                    Set pm = .CreateParameter("ligne", adVarChar, adParamInput, 15)
                    pm.Value = ActiveProject.Tasks(i).Text3
                    .Parameters.Append pm
                End With
                cmd.CommandText = requete
                Set rst = cmd.Execute

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 221
    Points : 88
    Points
    88
    Par défaut
    Je pense avoir un semblant d'explication

    Lorsque je fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    23456789101112131415161718192021 requete = ""
                requete = "SELECT ZPLAVALINT_0 as validationInterne FROM " & cnx.getBase & ".MACHINEFL "
                requete = requete & " WHERE LOT_0=?"          ' ActiveProject.Tasks(i).Text2
                requete = requete & " AND YNUMLIG_0=?"          ' ActiveProject.Tasks(i).Text3
     
                'Initialisation des paramètres
                With cmd
     
                    .CommandText = requete
    Si je regarde les propriété de mon objet cmd, j'ai deux paramaters de créer 'param1' et 'param2' après la commande .CommandText = requete

    Comme ensuite je fais ceci :

    'Numéro du lot
    Set pm = .CreateParameter("lot", adVarChar, adParamInput, 15)
    pm.Value = ActiveProject.Tasks(i).Text2
    .Parameters.Append pm

    'Numéro de ligne
    Set pm = .CreateParameter("ligne", adVarChar, adParamInput, 15)
    pm.Value = ActiveProject.Tasks(i).Text3
    .Parameters.Append pm
    Il en créer deux de plus.

    C'est une piste, je vais creuser mais si quelqu'un à une idée, je suis preneur....

    Merci

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

Discussions similaires

  1. [AC-2010] Message d'erreur lors de l'éxécution d'une requête
    Par Pittouti dans le forum Modélisation
    Réponses: 0
    Dernier message: 08/05/2013, 11h04
  2. [AC-2010] Erreur '13' lors de l'éxécution d'une requête INSERT INTO
    Par DébutantAccess dans le forum Access
    Réponses: 14
    Dernier message: 27/02/2013, 15h20
  3. Réponses: 2
    Dernier message: 14/01/2008, 14h17
  4. Réponses: 2
    Dernier message: 23/07/2007, 15h38
  5. Réponses: 5
    Dernier message: 24/10/2005, 18h49

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