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 :

Comment se connecter à une base Oracle à partir d'une macro VBA?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 57
    Points : 43
    Points
    43
    Par défaut Comment se connecter à une base Oracle à partir d'une macro VBA?
    Bonjour je recherche un tutorial qui explique de A à Z comment je peux afficher un tableau de résultat dans une page excel à partir d'une macro.
    J'aimerais récupérer ce tableau de résultat à partir d'une base Oracle. Si quelqu'un connait la démarche de la connection à l'affichage du résultat, ce serait sympa qu'il propose un petit tuto sympa.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Salut,
    en cherchant un peu j'ai trouvé ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	Dim OraSession  As Object     'Declare variables as OLE Objects
    	Dim OraDatabase As Object
    	Dim OraDynaset  As Object
     
    	Set OraSession  = CreateObject("OracleInProcServer.XOraSession")
    	Set OraDatabase = OraSession.DbOpenDatabase("SQL*Net_Connect_String", "scott/tiger", 0&)
     
    	MsgBox "Connected to " & OraDatabase.Connect & "@" & OraDatabase.DatabaseName
    	MsgBox "OO4O Version:   " & OraSession.OIPVersionNumber 
    	MsgBox "Oracle Version: " & OraDatabase.RDBMSVersion

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour tlm,

    En faisant une recherche (en haut à droite "Recherche dans ce forum") sur "Oracle" tu vas obtenir une 30ène de posts qui parlent de ce sujet, tu y trouveras peut-être ton bonheur

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    La commande Shell qui lance SQLPLUS via un fichier batch, par exemple. Mais pour cela, il faut avoir accès à la fois à EXCEL et à SQLPLUS (ORACLE.EXE).

    1°) Côté Excel :

    Créer un classeur REQUETES.XLS, par exemple.
    Créer un bouton de commande Bt_Lance_ORACLE sur une feuille quelconque, et toujours par exemple.
    Associer au bouton le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Bt_Lance_ORACLE_Click()
    Application.ScreenUpdating = False
    Shell "m:\requetes\batch\requetes.bat", 1
    'A partir d'ici : lancement séquentiel des routines
    Attend_Resultat
    Importe_Resultat
    Application.ScreenUpdating = True
    Exit Sub
    Comme on ne peut pas savoir à l'avance le temps que mettra ORACLE à extraire le résultat, il faut créer une boucle d'attente du fichier résultat. Pour cela on peut écrire deux macros dans un module, la première temporise EXCEL en suspendant le processus dans l'attente de l'extraction par ORACLE et la deuxième importe le résultat au format d'EXCEL :
    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
    Sub Attend_Resultat()
    On Error Resume Next
    Dim check As Boolean, fs As Object, nf As String
    check = False
    Set fs = CreateObject("Scripting.FileSystemObject")
    nf = "m:\requetes\resultats\AttendResultat.txt"
    Do
        If fs.FileExists(nf) = True Then
                check = True
            Else
                check = False
        End If
     
    Loop Until check = True
    Set fs = Nothing
    End Sub
    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
    Sub Importe_Resultat()
    On Error GoTo ErrorHandler
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    ' Teste l'existence du fichier
        If fs.FileExists("m:\REQUETES\RESULTATS\Resultat.xls") = True Then
            ' Le fichier existe à l'état d'exportation brut, il est mis en forme
            Workbooks.OpenText Filename:="M:\requetes\Resultats\Resultat.xls", _
            Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
            Comma:=False, Space:=False, Other:=True, OtherChar:="#", FieldInfo:= _
            Array(Array(1, 2), Array(2, 2))
            Else
                MsgBox "Le fichier Resultat.xls n'exite pas ou n'existe plus !", vbCritical, Title:="Désolé"
        End If
    Exit Sub
    ErrorHandler:
    If Application.ScreenUpdating = False Then
        Application.ScreenUpdating = True
    End If
    Dim Msg
        If Err.Number <> 0 Then
            Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " _
                 & Err.Source & Chr(13) & Err.Description
            MsgBox Msg, , "Erreur : Veuillez prévenir le responsable SVP !", Err.HelpFile, Err.HelpContext
        End If
    End Sub
    2°) Côté ORACLE :

    Il suffit de créer un fichier batch et son script SQL :

    Fichier REQUETES.BAT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set oracle_sid=BASE
    sqlplus identifiant/motdepasse@base @\\server\requetes\batch\requetes.sql
    Fichier REQUETES.SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    spool m:\REQUETES\RESULTATS\Resultat.xls
    select 'CHAMP1#CHAMP2' from dual;
    select CHAMP1||'#'||CHAMP2 from TABLE;
    spool off
     
    spool m:\REQUETES\RESULTATS\AttendResultat.txt
    select sysdate from dual;
    spool off
    exit
    C'est fini.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/06/2016, 22h59
  2. Réponses: 4
    Dernier message: 25/05/2011, 18h08
  3. Connexion d'une base oracle 10g express à une base sql server 2005 express
    Par boris2587 dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 08/09/2010, 15h21
  4. Réponses: 0
    Dernier message: 17/11/2009, 21h56
  5. Réponses: 1
    Dernier message: 27/09/2006, 08h50

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