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

Macros et VBA Excel Discussion :

Complément Excel - Procédure stockée Oracle


Sujet :

Macros et VBA Excel

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut Complément Excel - Procédure stockée Oracle


    J'ai un complément Excel qui fonctionnait mais, en passant de Oracle 11g à 12c, le passage de paramètre semble ne plus vouloir fonctionner correctement ou cela à changé mais je n'arrive pas à trouver d'informations à ce sujet.

    Nom : 2018-10-30_10-27-09.png
Affichages : 367
Taille : 18,4 Ko

    Le code VBA jusqu'où ça génère l'erreur:
    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
        Dim cnCNF As Connection
        Dim pStep As ADODB.Parameter
        Set cnCNF = New Connection
     
        cnCNF.CursorLocation = adUseClient
        cnCNF.Open cnString
     
        Dim cmCNF As ADODB.Command
        Set cmCNF = New ADODB.Command
        Dim rConfig As Recordset
        Set rConfig = New Recordset
     
        With cmCNF
            .ActiveConnection = cnCNF
            .CommandType = adCmdStoredProc
            .CommandText = "pkg_mgg.p_config"
     
            Set pStep = .CreateParameter("p_step", adVarChar, adParamInput, 10)
            .Parameters.Append pStep
        End With
        pStep.Value = ouvrage
        Set rConfig = cmCNF.Execute
    La procédure stockée, toute simple:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       PROCEDURE p_config (p_step IN VARCHAR2, p_cur OUT r_cursor)
       IS
       BEGIN
          OPEN p_cur FOR
             SELECT pkg_mgg.pmo_nb (num, 'S1') a3, pkg_mgg.pmo_nb (num, 'S2') a4,
                    pkg_mgg.pmo_nb (num, 'A2') a2, pkg_mgg.pmo_nb (num, 'A5') a5,
                    pkg_mgg.pmo_nb (num, '7') bio
               FROM step
              WHERE num = p_step;
       END;

    Si jamais quelqu'un a une idée...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Salut Franck,

    Il me semble que ta proc ne passe qu'un paramètre à ta SP qui en attend deux...

    Tu es certain que ça fonctionnait avant?

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut


    Oui ça fonctionnait avant et le second paramètre est un curseur pour remonter des données, mais en générale on ne le renseigne pas en VBA et en VB.Net on le met à Nothing

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Le message d'erreur me semble assez explicite, mais je ne travaille pas avec Oracle!

    Numéro ou types d'arguments erronés...

    Peut-être que ta nouvelle version exige que tu lui passes les deux arguments? As-tu essayé? As-tu essayé en pl-sql pur pour voir si cela fonctionne?

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Peut-être que ta nouvelle version exige que tu lui passes les deux arguments? As-tu essayé? As-tu essayé en pl-sql pur pour voir si cela fonctionne?
    Non je ne pense pas car ci-dessous j'alimente une liste déroulante qui prend qu'un seul argument qui est un curseur de sortie et la liste est bien alimentée :
    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
    Private Sub UserForm_Initialize()
        txtAnnee.Value = Year(Now) - 1
        Dim i As Integer
        i = 1
        Dim cnSIEA As Connection
        Set cnSIEA = New Connection
        Dim cnString As String
        cnString = "Provider=MSDAORA;Data Source=****;User Id=********;Password=********;"
        cnSIEA.CursorLocation = adUseClient
        cnSIEA.Open cnString
        Dim cmOuv As ADODB.Command
        Set cmOuv = New ADODB.Command
        Dim rData As Recordset
        Set rData = New Recordset
        With cmOuv
            .ActiveConnection = cnSIEA
            .CommandType = adCmdStoredProc
            .CommandText = "pkg_mgg.p_steps"
     
        End With
        Set rData = cmOuv.Execute
        Do While rData.EOF <> True
            lstSTEP.AddItem rData.Fields(1)
            lstSTEP.List(i - 1, 1) = rData.Fields(0)
            rData.MoveNext
            i = i + 1
        Loop
        rData.Close
        cnSIEA.Close
        Set rData = Nothing
        Set cnSIEA = Nothing
        Set cmOuv = Nothing
    End Sub

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Tu valorises ton paramètre avec la variable ouvrage. Je ne vois pas dans le code que tu as donné où tu valorises cette variable. Elle est passée en argument? As-tu vérifié sa valeur?

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Il s'agit d'une variable globale qui est renseigné au niveau du bouton de validation dans la Form.
    J'ai déjà contrôlé la valeur et elle est bien passée.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    J'ai des doutes que ce soit le passage à la nouvelle version d'Oracle qui pose problème. As-tu vérifié dans Outils/Références que tu pointes vers la bonne bibliothèque?

    Si le code fonctionnait tel quel avec la verssion 11g et qu'il plante avec la version 12c, c'est un mystère Oracle. Mais perso, je penche plus pour un problème ponctuel de valorisation de ton argument p_step.

    As-tu un point d'arrêt sur la ligne p_Step.Value = ouvrage pour bien vérifier la valorisation de ta variable? (au passage, les variables globales, c'est pas le top... même si le problème ne vient probablement pas de là)...

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    J'ai des doutes que ce soit le passage à la nouvelle version d'Oracle qui pose problème. As-tu vérifié dans Outils/Références que tu pointes vers la bonne bibliothèque?
    Oui oui niveau bibliothèques aucun soucis étant donné qu'en amont de ce problème j'ai déjà une requête qui me remonte bien un jeu de données pour remplir une liste déroulante
    Nom : 2018-10-31_14-32-50.png
Affichages : 346
Taille : 52,2 Ko

    Citation Envoyé par Pierre Fauconnier Voir le message
    As-tu un point d'arrêt sur la ligne p_Step.Value = ouvrage pour bien vérifier la valorisation de ta variable? (au passage, les variables globales, c'est pas le top... même si le problème ne vient probablement pas de là)...
    C'est la première chose que je fais:
    Nom : 2018-10-31_14-32-01.png
Affichages : 283
Taille : 4,1 Ko


    Pour les variables globales, je suis le premier à les proscrire mais c'est un vieux code qui a été fait par mes deux prédécesseurs mais je n'ai pas le temps de passer sur tout les formulaires

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Je ne mets pas tes capacités en doute, hein, je cherche à comprendre...

    A l'installation de ta nouvelle version, tu n'aurais pas un truc à cocher/décocher pour la prise en compte des espaces à droite? Je vois que tu donnes 10 caractères à ton paramètre, mais ta variable n'en compte que 6. Y-a-t-il une option dans les drivers Oracle qui ajoute/supprime les caractères supplémentaires pour "remplir" le paramètre?

    Dès lors, peut-être que Oracle reçoit "EPU136" alors qu'il attend "EPU136____" (ou l'inverse )...

    je ne sais pas, hein, je tâtonne comme toi. Je pense à cela parce que j'ai eu un problème similaire avec un driver Sybase. Il suffisait de cocher une case "trim values" ou quelque chose du genre et hop, mon problème a été résolu...

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je ne mets pas tes capacités en doute, hein, je cherche à comprendre...
    Pas de soucis t'inquiète, il faut procéder par élimination de toute façon

    Citation Envoyé par Pierre Fauconnier Voir le message
    A l'installation de ta nouvelle version, tu n'aurais pas un truc à cocher/décocher pour la prise en compte des espaces à droite? Je vois que tu donnes 10 caractères à ton paramètre, mais ta variable n'en compte que 6. Y-a-t-il une option dans les drivers Oracle qui ajoute/supprime les caractères supplémentaires pour "remplir" le paramètre?

    Dès lors, peut-être que Oracle reçoit "EPU136" alors qu'il attend "EPU136____" (ou l'inverse )...

    je ne sais pas, hein, je tâtonne comme toi. Je pense à cela parce que j'ai eu un problème similaire avec un driver Sybase. Il suffisait de cocher une case "trim values" ou quelque chose du genre et hop, mon problème a été résolu...
    L'avantage du type Varchar2 en Oracle par rapport au Char c'est justement qu'il n'y a pas ce problème de remplissage des caractères manquant par des espaces.
    En tous cas, le paramètre passé est bien celui attendu par la procédure mais c'est justement ce que je ne comprend pas au sujet de cette erreur.
    Le paramètre créé en VBA est correctement construit et renseigné ... du moins je pense

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131

  13. #13
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    C'était effectivement une très bonne piste mais je pense que côté client, VB ou VBA ne sont pas prévu pour gérer ceci...
    Nom : 2018-10-31_15-15-57.png
Affichages : 289
Taille : 19,4 Ko

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Arf... Tu l'aurais donné en chinois que c'eut été pareil

    Concrètement, je suppose que cela veut dire que c'est bien un problème de version?

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Arf... Tu l'aurais donné en chinois que c'eut été pareil


    Citation Envoyé par Pierre Fauconnier Voir le message
    Concrètement, je suppose que cela veut dire que c'est bien un problème de version?
    Hé bin sans doute un problème de version mais en tous cas cela ne m'étonne pas c'est que VB ou VBA n'arrivent pas à remonter les infos de curseurs implicite.
    Le Framework est prévu pour remonter automatiquement les données d'un curseur de sortie (paramètre de type OUT en PL/SQL Oracle).

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    À tous ceux qui rêve de me coller un -1 voilà ma réponse à ce genre de problème que j'ai déjà rencontré.

    Même si ta bas de données a migré vers 12c, je t'inviterai à utiliser la version 11g coté client.

    Je me rappel avoir utilisé la g10 sur certains machine et la g11 sur d'autres.

    Si je devais me connecter à Oracles 12c avec une version Windows Xp j'utilisai la version 8.

    Âpre tout ça marche ou pas!
    Dernière modification par Invité ; 02/11/2018 à 14h09.

Discussions similaires

  1. [ADO]Procédure stocké Oracle
    Par chalem dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/04/2007, 21h21
  2. Procédures stockées ORACLE 10g - JAVA 1.6
    Par poussinette0712 dans le forum JDBC
    Réponses: 2
    Dernier message: 27/03/2007, 01h49
  3. procédure stockée Oracle depuis VB.net
    Par marcusien dans le forum SQL
    Réponses: 18
    Dernier message: 09/03/2007, 21h53
  4. procédure stockée + Oracle
    Par BONNEFOI Patrick dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/04/2005, 16h09
  5. procédure stockée Oracle dans delphi 6
    Par UPNE387 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2004, 10h47

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