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 :

Requête SQL - odbc


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste financier
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Analyste financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut Requête SQL - odbc
    Bien le bonjour !

    Je possède un bout de code qui fonctionne et qui me permet de me connecter à une base de donnée odbc :

    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
     
     
    Tiers = Range("B2").Value
     
    ' Active la requête
    With Selection.QueryTable
        .Connection = Array(Array( _
        "ODBC;DSN=crkp.world;UID=user;PWD=motdepasse;DBQ=CRKP.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessf" _
        ), Array("ul;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=60000;TLO=0;"))
        .CommandText = Array( _
        "SELECT PAR.INT_KEY,PAR.NAME,PAR.VORNAME,PAR.STRASSE,PAR.ORT FROM KO.PAR PAR WHERE PAR.INT_KEY=" & "'" & Tiers & "'")
        .SavePassword = True
    End With
     
    ActiveWorkbook.RefreshAll
    Malheureusement je suis trop novice en requête SQL pour comprendre comment je pourrais avoir le/les résultat(s) de cette commande dans une variable.

    Un petit coup de main ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    1. Je ne vois pas l'utilité du Array(...) pour le commandtext

    2. Telle qu'écrite, la macro modifie la source de la plage de données qui reçoit les données externes. Si tu veux le résultat dans une variable, il faut que cette variable soit une variable de type recordset (adodb ou dao) puisque la requête renverra un jeu d'enregistrements (recordset en anglais). Il faudra soit transférer ce jeu à une plage (.copyfromrecordset), soit itérer sur les lignes renvoyées...

    Que cherches-tu à réaliser?
    "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
    Candidat au Club
    Homme Profil pro
    Analyste financier
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Analyste financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut
    Hello !

    Je ne comprends pas bien comment ma commande pourrait-elle modifier la base de données avec un "SELECT", mais je dois avouer que si je connais un peu le VBA, je deviens un embrillon dès que ça touche aux bases de données, peut-être pourrais-tu m'éclairer ? :

    Ce code m'a été donné par l'enregistreur de macro auto., il me sort sur une plage le nom, prénom, etc. de ma variable "Tiers".

    Je souhaiterais ne pas devoir passer par une plage dans le classeur mais obtenir le résultat de ma requête dans un recordset (comme tu dis ^^), afin de pouvoir la traité avant. Chose que je ne sais pas faire !

    J'ai écopé plusieurs forum mais il semble que toutes les bases de données ne fonctionnent pas pareil se qui me complique un peu les choses .

    Merci pour ton aide !

  4. #4
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je n'ai pas dit que cela modifiait les données dans la base de données, j'ai dit que cela modifiait la source des données => les valeurs récupérées dans la plage sont différentes.

    Pour obtenir cela dans un recordset, tu dois :
    1. référencer la librairie idoine ;
    2. déclarer les variables de connexion et de recordset ;
    3. ouvrir la connexion ;
    4. ouvrir le recordset.


    Pour référencer la librairie, va dans Outils > Références et choisis Microsoft Activex Data Object 2.7. Dans le code, tu dois instancier tes variables puis les connecter à tes données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim pCon as new adodb.connection
    dim pRst as adodb.recordset
     
    pCon.Open .Connection = Array(Array( _
        "ODBC;DSN=crkp.world;UID=user;PWD=motdepasse;DBQ=CRKP.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessf" _
        ), Array("ul;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=60000;TLO=0;"))
    set pRst= pCon.execute(""SELECT PAR.INT_KEY,...")

    Après cela, tu peux parcourir le recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do while not pRst.EOF
        ...
        ...
        pRst.MoveNext ' Très important, sinon boucle infinie !!!
    loop
    ou le coller à une plage de valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage.copyfromrecordset pRst
    "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...
    ---------------

Discussions similaires

  1. [WD12E] ODBC Mysql et Requête SQL.
    Par rednight dans le forum WinDev
    Réponses: 0
    Dernier message: 06/10/2009, 20h19
  2. [Fortran 90] Requêtes SQL base ACCESS via ODBC
    Par izalec41 dans le forum Fortran
    Réponses: 0
    Dernier message: 22/10/2008, 12h20
  3. Réponses: 2
    Dernier message: 07/02/2008, 12h45
  4. [Sybase] Accélérer une requête SQL via ODBC.
    Par phtpht dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 04/01/2007, 16h36
  5. [Requête SQL / ODBC] Select x INTO ZedZedZed?
    Par Jean_Benoit dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/12/2006, 09h42

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