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 :

Connexion vers une BD oracle


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Connexion vers une BD oracle
    Bonjour!

    J'essaie de faire une requête de mise-à-jour dans une BD Oracle avec une macro Excel VBA, mais à chaque fois ça me demande le mot de passe. Pour contrer ce problème, j'ai essayer de faire ce qui suit :
    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 objConn As DAO.Database
        Dim objRS As DAO.Recordset
     
        Dim ConnectStr As String
        ConnectStr = "Driver={Microsoft ODBC for Oracle};& Source=maBD.WORLD;& UID=information;& Password=information"
     
        Set objConn = OpenDatabase(ConnectStr)
     
        Set wbkClasseur = Workbooks.Add
     
    [traitement...]
     
        Set objRS = Nothing
        objConn.Close
        Set objConn = Nothing
    mais ça me donne un message d'erreur que le fichier Driver={Microsoft ODBC for Oracle};& Source=maBD.WORLD;& UID=information;& Password=information est introuvable...

    Quel est alors le meilleur moyen de procéder pour accéder à ma BD sans avoir à entrer le mot de passe à chaque fois?

    Merci!!

    aldapal

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    as tu essayé de créer la connexion ODBC lanuellement et d'utiliser cette connexion dans Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ConnectStr ="DSN=NomOdbc; UID=User; PWD=MotdePasse""
    Jérôme

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Même erreur.... "Erreur d'exécution '3024': Fichier introuvable"

    Si ça peut aider, ma BD est en Oracle 73 Ver 2.5...

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    En fait, ce que je veux exactement, c'est de faire un rafraichissement des données externes qui sont sur mon Excel via une macro VBA, sans que ça demande le mot de passe, puisque la macro s'exécutera automatiquement...

    Je veux donc pouvoir me connecter à la BD en y forçant le user/mdp et ensuite faire un Selection.QueryTable.Refresh BackgroundQuery:=False.

    Mais pour l'instant, ça demande toujours un mot de passe...

    Merci d'avance!!

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Solution pour SQL Server
    Voilà ce que je fais avec SQL Server

    je charge en VB, la string de connexion avant de rafraichir l'onglet, les données de connexion sont dans une feuille du classeur qui peut être protégée si nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Preparation de la string de connection "connect"
    server = Range("Base").Cells(2, 2)
    base = Range("Base").Cells(3, 2)
    login = Range("Base").Cells(4, 2)
    password = Range("Base").Cells(5, 2)
    connect = "ODBC;DRIVER=SQL Server;SERVER=" & server & _
    ";UID=" & login & _
    ";PWD=" & password & _
    ";APP=Microsoft® Query;;DATABASE=" & base
    Worksheets("Brut").QueryTables(1).Connection = connect
     
    ' Refresh
    Selection.QueryTable.Refresh BackgroundQuery:=False

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous,

    kiki29, j'ai regardé le site, trouvé comment me connecter avec un ODBC DSN, mais j'ai toujours des erreurs. Je n'y comprends plus rien...

    En mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ConnectStr = "DSN=DSNsysteme;" & _
               "Uid=information;" & _
               "Pwd=information"
    j'ai encore une fois une erreur de fichier introuvable.

    En mettant le code de Begsym, c'est mon refresh qui ne fonctionne plus, erreur générale ODBC.


    D'autres idées??

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    voila ce que fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet.QueryTables.Add(Connection:= _
            "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=iid;PWD=pwd;SERVER=toto;", _
            Destination:=Range("A1"))
            .CommandText = Array( marequette )

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    1) c'est quoi "marequette"?

    2) et ensuite, en faisant un refresh, ça devrait fonctionner?

    Merci, je sens que ça débloque!!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    marequette c'est la requette a exécuter
    tu peux juste établir la connection .
    et la fermer à la fermeture du classeur mais je te le déconseille pour des probleme de sécurité.

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Ok, j'arrive à passer les étapes de connexion sans erreur, mais j'ai une erreur générale ODBC au refresh dns le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        With ActiveSheet.QueryTables.Add(Connection:= _
            "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=information;PWD=information;SERVER=mon_serveur;", _
            Destination:=Range("A2"))
            .CommandText = Array("Connection.Open")
        Selection.QueryTable.Refresh BackgroundQuery:=False
        Connection.Close
    Des idées pourquoi il y a une erreur?

    Merci!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    essaye comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With ActiveSheet.QueryTables.Add(Connection:= _
            "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=information;PWD=information;SERVER=mon_serveur;", _
            Destination:=Range("A2"))
            .CommandText = Array("Connection.Open")
             .RefreshOnFileOpen = True
        Selection.QueryTable.Refresh BackgroundQuery:=False
        Connection.Close
    moi je la met a faulse par defaut mais vois avec un peut de chance ...
    RefreshOnFileOpen

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bon là, je commence à être désepéré.

    On dirait bien que la connexion se fait, mais je ne suis pas capable de faire de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.QueryTable.Refresh BackgroundQuery:=False
    j'ai une erreur générale ODBC à cette ligne...

    Des explications?

    Merci!

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Ok, maintenant on dirait que mon poste n'aime pas faire de refresh... Voici un autre exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Sheets("Donnees Bain").QueryTables.Add "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=id;PWD=pw;SERVER=serv;", Sheets("Donnees Bain").Range("A" & 102 - nDays), strSQL
        Sheets("Donnees Bain").QueryTables(1).FieldNames = False
        Sheets("Donnees Bain").QueryTables(1).Refresh BackgroundQuery:=False
    où strSQL est ma requête à la BD.
    Je tombe avec une erreur Générale ODBC à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Donnees Bain").QueryTables(1).Refresh BackgroundQuery:=False
    Au secours!!

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    C'est probablement ta requête qui comporte une erreur. Oracle est beaucoup plus sensible à la syntaxe qu'Access par exemple...

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    en effet c'était ça. tout est beau maintenant, merci.

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

Discussions similaires

  1. Transferdatabase et lien vers une table Oracle
    Par meandreux dans le forum Access
    Réponses: 1
    Dernier message: 13/07/2007, 09h37
  2. connexion sur une BD oracle 10g à partir de Java
    Par dr.dramane dans le forum JDBC
    Réponses: 6
    Dernier message: 24/03/2007, 16h41
  3. [9i] Importer des données Excel dans une table
    Par oasma dans le forum SQL
    Réponses: 6
    Dernier message: 19/03/2007, 07h39
  4. lien odbc vers une base oracle
    Par fatati dans le forum Oracle
    Réponses: 1
    Dernier message: 12/01/2007, 10h49
  5. [Réseau] connexion vers une machine derriere un routeur
    Par fantomasmusic dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/10/2005, 13h54

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