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 :

Class Connection BD SQL


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Class Connection BD SQL
    Bonjour,

    J'essaye de créer une classe dans Excel pour me connecter sur une BD ODBC, cependant j'ai des problèmes en appellant une de mes méthodes.

    Voici le code de ma classe SQLConnect:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private connectStr As String
     
    Public Property Get ConnectionString() As String
        ConnectionString = connectStr
    End Property
     
    Public Property Let ConnectionString(ByVal newConnexStr As String)
        connectStr = newConnexStr
    End Property
     
    Public Function sqlQuery(query As String, destinationCells) As QueryTable
        sqlQuery = ActiveSheet.QueryTables.Add(Connection:=Me.ConnectionString, Destination:=destinationCells, sql:=query)
    End Function
    Puis le code dans mon module:
    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
    Public Sub Test()
        Worksheets("Test").Activate
        Sheets("Test").Select
    
        Dim sql As SQLConnect
        Set sql = New SQLConnect
        sql.ConnectionString = "ODBC;DSN=monDSN;UID=monUID;PWD=monPWD"
    
        Dim query As String
        Dim queryTab As QueryTable
        sqlQuery = "SELECT * FROM SW_T_ParametrageOTC"
    
        Set queryTab = sql.sqlQuery(query, Range("A1"))
        queryTab.Refresh
    End Sub
    Le déboggueur m'indique une erreur dans la ligne en rouge, donc je pense que ma méthode a un problème. J'ai essayé de trouver une solution sur Google, mais malheureuseument j'ai rien trouvé pour l'instant.

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Tu peux réessayer en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlQuery = "SELECT * FROM SW_T_ParametrageOTC"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query = "SELECT * FROM SW_T_ParametrageOTC"


    michel

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Oops mea culpa, une gaffe lors du recopiage du code...

    Mon code correct est celui-ci:
    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
    Public Sub Test()
        Worksheets("Test").Activate
        Sheets("Test").Select
    
        Dim sql As SQLConnect
        Set sql = New SQLConnect
        sql.ConnectionString = "ODBC;DSN=monDSN;UID=monUID;PWD=monPWD"
    
        Dim query As String
        Dim queryTab As QueryTable
        query = "SELECT * FROM SW_T_ParametrageOTC"
    
        Set queryTab = sql.sqlQuery(query, Range("A1"))
        queryTab.Refresh
    End Sub
    Et quand j'execute mon code j'obtiens l'erreur d'execution 91 sur la ligne en rouge. Et si j'execute mon code avec des points d'arrêts, le code bug à la ligne suivante de mon code de classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function sqlQuery(query As String, destinationCells) As QueryTable
        sqlQuery = ActiveSheet.QueryTables.Add(Connection:=Me.ConnectionString, Destination:=destinationCells, sql:=query)
    End Function

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Je n'ai pas la possiblité de vérifier pour l'instant mais est ce qu'il ne faudrait pas plutot écrire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set sqlQuery = ActiveSheet.QueryTables.Add(....

    bonne journée
    michel

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Yes, c'était exactement ça, merci!

Discussions similaires

  1. connection à ms sql server
    Par korchimustapha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/03/2006, 08h31
  2. Réponses: 3
    Dernier message: 15/03/2006, 14h53
  3. Connection de SQL SERVER 2005 EXPRESS avec HIBERNATE
    Par jerome giraud dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/02/2006, 09h07
  4. Connection ms sql et oracle
    Par JOBRU dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/01/2006, 16h47
  5. Réponses: 7
    Dernier message: 18/07/2005, 13h42

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