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 :

Récuperer les données d'une base de donnée via ODBC dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Récuperer les données d'une base de donnée via ODBC dans une variable
    Bonjour,

    Je programme un logiciel en VBA sous Excel.
    Je suis amené à me connecter à une base de donnée en utilisant ODBC. Cependant, je voudrais pouvoir récupérer les données dans des variables et ne pas les afficher dans excel.

    Actuellement j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=amasis;", Destination _
            :=Range("A1"))
            .CommandText = Array( _
            "SELECT FROE.OENUMDOC1, FROE.OENUMDOC2, FROE.OENUMAP, FROE.OEPN, FROE.OESN, FROE.OEATA, FROE.OECODTOP, FROE.OEREF, FROE.OEEXA4, FROE.OEEXMM, FROE.OEEXJJ" & Chr(13) & "" & Chr(10) & "FROM AMASIS.AMSF.FROE FROE" & Chr(13) & "" & Chr(10) & "WHERE (FROE.OEATA='61')")
     
     
        End With
    Comme faire pour récuperer cela dans des variables, un peu comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     sql = "SELECT TOP 1 id FROM tbl_acft WHERE immat = '" & immat & "'"
        Set Db = DAO.OpenDatabase(adresse_bdd, False, False, ";PWD=bt_moteur")
        Set rec = Db.OpenRecordset(sql, DAO.dbOpenSnapshot)
        Do While Not (rec.EOF)
            Cherche_Id_Avion = rec.Fields(0).value
            rec.MoveNext
        Loop
        rec.Close
        Db.Close
        Set rec = Nothing
        Set Db = Nothing
    Faisant pas mal de PHP/MySQL j'ai un peu de mal dans la syntaxe ... Si quelqu'un a la solution :-)

    Merci d'avance.

  2. #2
    Expert éminent sénior

    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
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir


    Tu pourrais récupérer les données dans un tableau:

    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
    Dim Tbl() As Variant 
     
    ReDim Tbl(Rs.RecordCount - 1, Rs.Fields.Count)
     
    Do While Not Rs.EOF
        For i = 0 To Rs.Fields.Count - 1
            If IsNull(Rs.Fields(i).Value) = True Then
                Tbl(N, i) = ""
                Else
                Tbl(N, i) = CStr(Rs.Fields(i).Value)
            End If
        Next i
     
        N = N + 1
        Rs.MoveNext
    Loop


    bonne soirée
    michel

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Oui c'est exactement ce que je veux faire.

    Mais comment faire pour déclarer Rs (quelle type de variable) ? Et comment mettre les données de la requête SQL dans Rs ?

    La requete pour le moment est de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=amasis;", Destination _
            :=Range("A1"))
            .CommandText = Array( _
            "SELECT FROE.OENUMDOC1, FROE.OENUMDOC2, FROE.OENUMAP, FROE.OEPN, FROE.OESN, FROE.OEATA, FROE.OECODTOP, FROE.OEREF, FROE.OEEXA4, FROE.OEEXMM, FROE.OEEXJJ" & Chr(13) & "" & Chr(10) & "FROM AMASIS.AMSF.FROE FROE" & Chr(13) & "" & Chr(10) & "WHERE (FROE.OEATA='61')")
     
     
        End With

  4. #4
    Expert éminent sénior

    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
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    je ne comprend plus .
    dans ton premier message tu utilises la bibliotheqe DAO et maintenant tu montre une procedure qui utilise la propriété QueryTables ...


    michel

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Re,

    J'ai montré la propriété DAO car c'était pour illustrer ce que je voulais faire.
    Comme tout n'est pas non plus très clair dans ma tête je me suis peut etre mal exprimé.

    Dans notre entreprise, il y a un logiciel (Amasis) ou j'aimerai extraire des données dans mon logiciel en VBA. Sous Excel, je vais dans Données > Données Externes > Créer une requête. Afin d'automatiser cela, j'ai fait une macro pour en voir le code. Le code généré passe par la propriété QueryTable. J'aimerai pouvoir récupérer cela dans une variable de type tableau afin de pouvoir l'utiliser dans mon logiciel VBA.

    J'espère que c'est plus clair à présent.

  6. #6
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour,

    je ne connais pas ton logiciel


    essaye (pas testé)


    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
                        Dim Donnees                     As DAO.Database
     
                        Dim TexteRequete                As String
                        Dim Rs                          As DAO.Recordset
                        Dim Tbl()                       As Variant
     
        Set Donnees = DAO.OpenDatabase("amasis", False, False)
     
        TexteRequete = "SELECT OENUMDOC1, OENUMDOC2, OENUMAP, OEPN, ESN, OEATA, OECODTOP, OEREF, OEEXA4, OEEXMM, OEEXJJ " & _
                            "FROM FROE " & _
                                "WHERE OEATA='61'"
        Set Rs = Donnees.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
     
        ReDim Tbl(Rs.RecordCount - 1, Rs.Fields.Count)
     
        Do While Not Rs.EOF
            For i = 0 To Rs.Fields.Count - 1
                If IsNull(Rs.Fields(i).Value) = True Then
                    Tbl(N, i) = ""
                    Else
                    Tbl(N, i) = CStr(Rs.Fields(i).Value)
                End If
            Next i
     
            N = N + 1
            Rs.MoveNext
        Loop

    Bon courage


    Jean Pierre

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Re,

    J'ai trouvé la solution.

    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
     
    Dim wstemp As Workspace
        Dim dbtemp As Database
        Dim rstemp As Recordset
        Dim sql As String
     
        sql = "SELECT OENUMDOC1, OENUMDOC2, OENUMAP, OEPN, ESN, OEATA, OECODTOP, OEREF, OEEXA4, OEEXMM, OEEXJJ " & _
                            "FROM FROE " & _
                                "WHERE OEATA='61'"
     
        sql = "SELECT OENUMDOC1 FROM FROE WHERE OEATA='61'"
     
        Set wstemp = DBEngine.Workspaces(0)
        Set dbtemp = wstemp.OpenDatabase("", False, False, "ODBC;DSN=amasis;USR=test;PWD=test")
        Set rstemp = dbtemp.OpenRecordset(sql, dbOpenDynaset, dbSQLPassThrough)
     
       ' Set Db = wrkODBC.OpenDatabase("DSNname", dbDriverNoPrompt, False, "ODBC;DATABASE=;UID=;PWD=;DSN=DSNname")
     
        Do Until rstemp.EOF
            MsgBox rstemp(0)
            rstemp.MoveNext
     
        Loop
    merci pour l'aide !
    Bon WE.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 10/06/2011, 03h40
  2. " depuis une base A faire un alter dans une base B "
    Par SALMHSN dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/04/2011, 17h17
  3. [ODBC] Insertion d'un fichier dans une base oracle 8i via ODBC
    Par garfield_fr dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/12/2010, 09h58
  4. Réponses: 10
    Dernier message: 17/03/2007, 14h05
  5. les images dans une base de données
    Par houhou dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/06/2004, 14h27

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