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 Oracle sous EXCEL ADO - Erreur de connexion ORA-12154


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut Connexion Oracle sous EXCEL ADO - Erreur de connexion ORA-12154
    Bonjour,
    j'ai suivi les indications du tuto http://drq.developpez.com/vb/tutoriels/ADO/ pour me connecter à une base Oracle depuis Excel.

    J'ai reporté les valeurs de mon TnsNames.ora dans Data Source :

    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
    Private Sub CnxOracle()
    	'Ajouter référence Microsoft ActiveX pour pouvoir utiliser Objets ADO
     
    	'Déclaration de la variable de connexion
    	Dim cnx As ADODB.Connection
    	Set cnx = New ADODB.Connection
     
    	Dim StConnectionString As String
     
    	'Définition de la chaîne de connexion
    	StConnectionString="Provider=OraOLEDB.Oracle;Data Source=XXXXXXXX.WORLD=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=YY.YY.YY.YY)(PORT=ZZZZ))(CONNECT_DATA=(SERVICE_NAME=XXXXXXXX)));User Id=MyId;Password=MyPwd;"
    	cnx.ConnectionString = StConnectionString
     
    	'Ouverture de la base de données
    	cnx.Open
     
    	'Fermeture de la base de données
    	cnx.Close
     
    End Sub
    J'obtiens l'erreur
    ORA-12154: TNS ; l'identificateur de connexion indiqué n'a pas pu être résolu
    sur la ligne : Je peux par ailleurs me connecter normalement à la base avec Toad.

    Mes recherches sur internet m'ont conduit à ajouter les 2 dernières lignes dans mon sqlnet.ora :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # This file is actually generated by netca. But if customers choose to 
    # install "Software Only", this file wont exist and without the native 
    # authentication, they will not be able to connect to the database on NT.
     
    SQLNET.AUTHENTICATION_SERVICES = (NTS)
    NAMES.DIRECTORY_PATH= (TNSNAMES)
    NAMES.DEFAULT_DOMAIN=acme.com
    Je tourne en rond depuis 2 jours.
    Si quelqu'un a une idée, je suis preneur.

    Merci.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci rdurupt pour le lien,

    J'ai toujours mon souci de TNS.

    J'ai mis la vue de mon driver Oracle en pièce-jointe.

    J'ai essayé comme provider : MSDAORA, MSDAORA.1, OraOLEDB.Oracle et OraOLEDB.Oracle.1
    Images attachées Images attachées  
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  4. #4
    Invité
    Invité(e)
    Par défaut
    dans la fonction GenereCSTRING du module de classe remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case 2
           GenereCSTRING = "Driver={Oracle in OraClient11g_home1};Dbq=" & BASE & ";Uid=" & User & ";Pwd=" & Password & ";"

  5. #5
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    L'exécution de :
    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
    28
    Sub test()
        Dim Con As New ADODBRD
        Dim Sql As String
        Dim Rs As Object
        Con.TYPEBASE = 2
        Con.User = "MyUser"
        Con.PassWord = "MyPwd"
        Con.BASE = "MyBase.WORLD=" & _
          "(DESCRIPTION=" & _
            "(ADDRESS=" & _
              "(PROTOCOL=TCP)" & _
              "(HOST=MyIp)" & _
              "(PORT=MyPort)" & _
            ")" & _
            "(CONNECT_DATA=" & _
              "(SERVICE_NAME=MyBase)" & _
            ")" & _
          ")"
     
        If Con.OpenConnetion = False Then
            MsgBox "La connexion à la base de données n'a pas réussi ", vbCritical
            Else
            'Sql = "Select MyTable.* from MyTable Where [MyTable].[MyChamp]='toto';"
            Sql = "SELECT COUNT(*) FROM PH_E8_DEST;"
            Set Rs = Con.OpenRecordSet(Sql)
            If Rs.EOF Then ActiveSheet.Range("a1").CopyFromRecordset Rs
        End If
    End Sub
    M'affiche :
    ORA-12154 : TNS : l'identificateur indiqué n'a pas pu être résolu
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  6. #6
    Invité
    Invité(e)
    Par défaut
    tu passe à con.base tous le processus de connexion!
    je ne dis pas qu'il ne faille pas créer un autre GenereCSTRING qui pendrait le prendrait en compte!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim con As New ADODBRD
    con.BASETYPE = OracleTcpIp
    con.MonPort = 25
    con.MonServer = "192.168.1.1"
    con.Database "toto"
    con.MonTCP = "TCP"
    con.OpenConnetion
    End Sub
    Code ADODBRD : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    Private Connexion
    Private TYPEBASE As MyAdo
    Private BASE
    Private Server
    Private User
    Private Password
    Private Port
    Private TCP
    Public Enum MyAdo
        ACCESS97 = 1
        ACCESS2000 = 2
        ACCESS2012 = 1
        ODBC = 4
        Oracle = 5
        OracleTcpIp = 13
        SQLSERVER_NT4 = 12
        SQLSERVER2005 = 6
        SQLServer2008R2 = 7
        SQLite = 8
        SQLite3 = 9
        CSV = 10
        Excel8 = 11
    End Enum
    Public Property Get MonTCP() As String
    MonTCP = TCP
    End Property
    Public Property Let MonTCP(ByVal TCP_ As String)
    MonTCP = TCP_
    End Property
    Public Property Get MonPort() As String
    MonPort = Port
    End Property
    Public Property Let MonPort(ByVal Port_ As String)
    MonPort = Port_
    End Property
    Public Property Get MonPassword() As String
    MonPassword = Password
    End Property
    Public Property Let MonPassword(ByVal Password_ As String)
    Password = Password_
    End Property
    Public Property Get MonUser() As String
    MonUser = User
    End Property
    Public Property Let MonUser(ByVal User_ As String)
    User = User_
    End Property
    Public Property Get MonServer() As String
    MonServer = Server
    End Property
    Public Property Let MonServer(ByVal MonServer_ As String)
    Server = MonServer_
    End Property
    Public Property Get Database() As String
    Database = BASE
    End Property
    Public Property Let Database(ByVal Database_ As String)
    BASE = Database_
    End Property
    Public Property Get BASETYPE() As MyAdo
    BASETYPE = TYPEBASE
    End Property
    Public Property Let BASETYPE(ByVal BASETYPE_ As Long)
    TYPEBASE = BASETYPE_
    End Property
    Public Function GenereCSTRING()
    'Permet de générer le Cornec String
    '1 - ACCESS 97
    '2 - ACCESS 2000
    '3 - ACCESS 2012
    '4 - ODBC
    '5 - ORACLE
    '6 - SQL SERVER 2005
    '7 - SQL Server 2008 R2
    '8 - SQLite
    '9 - SQLite3
    Select Case TYPEBASE
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & BASE
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";"
        Case ODBC
            GenereCSTRING = "Provider=MSDASQL.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case Oracle
            GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case OracleTcpIp
            GenereCSTRING = "MyBase.WORLD=(DESCRIPTION=(ADDRESS=(PROTOCOL=" & TCP & ")(HOST=" & Server & ")(PORT=" & Port & "))(CONNECT_DATA=(SERVICE_NAME=" & BASE & ")))"
        Case SQLSERVER_NT4
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        Case SQLSERVER2005
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        Case SQLServer2008R2
            GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & Password & ";"
        Case SQLite
            GenereCSTRING = "Provider=OleSQLite.SQLiteSource.3; Data Source=" & BASE
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & BASE & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & BASE & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "ODBC;DBQ=" & Server & ";Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Case Excel8
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Extended Properties=Excel 8.0;"
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
     
    End Select
    End Function
    Public Function RetournRep()
    Dim t
    t = Split(BASE, "\")
    RetournRepFichier = Replace(BASE, t(UBound(t)), "")
    End Function
    Public Function RetournFichier()
    Dim t
    t = Split(BASE, "\")
    RetournFichier = t(UBound(t))
    End Function
    Public Function OpenConnetion()
    'Ouvre une connexion à  la base de données.
    OpenConnetion = False
    On Error Resume Next
    Dim ConnecString
    Dim NbErr
    Set Connexion = CreateObject("ADODB.Connection")
    Connexion.Open GenereCSTRING 'ConnecString
    If Err = 0 Then
       OpenConnetion = True
       Connexion.CommandTimeout = 14400
    Else
    Debug.Print Err.Descriptio
    End If
    Err.Clear
        On Error GoTo 0
    End Function
    Public Function CloseConnection()
    'Referme la connexion
    CloseConnection = False
    On Error Resume Next
    Connexion.Close
    Set Connexion = Nothing
    If Err = 0 Then
       CloseConnection = True
    End If
    Err.Clear
    On Error GoTo 0
    End Function
    Public Function OpenRecordSet(Sql)
    'Retourne un RecordeSet
    On Error Resume Next
        Dim RS
    Dim NbErr
    Err.Clear
    If Connexion.State = 0 Then
        OpenConnetion
    End If
    Debug.Print Replace(Sql, "%", "*")
    Set OpenRecordSet = CreateObject("ADODB.Recordset")
    OpenRecordSet.Open Sql, Connexion, 1, 3
    If Err Then
    MsgBox Err.Description
        If NbErr < 11 Then
            Set OpenRecordSet = Nothing
        End If
    End If
    Err.Clear
    On Error GoTo 0
    End Function
    Public Function RetournConnection()
    Set RetournConnection = Connexion
    End Function
    'Pas fonctionel
    Public Function OpenRecordSetParametre(Sql, Param)
    Dim Commande
    Dim Params
    Set Commande = CreateObject("ADODB.Command")
    Dim MyParameter
    Set MyParameter = CreateObject("ADODB.Parameter")
    Set Commande.ActiveConnection = Connexion
    Commande.CommandText = "select Requête2.* from Requête2;"
    Commande.CommandType = adCmdText
    Set MyParameter = Commande.CreateParameter("[NumJob]", adNumeric)
    MyParameter.Value = 10
    Commande.Parameters.Append MyParameter
    Set Rs2 = Commande.Execute
    End Function
    'Cloture le RecordSet
    Public Function CloseRecordSet(RS)
    On Error Resume Next
        RS.Close
        Set CloseRecordSet = Nothing
    On Error GoTo 0
    End Function
    'Pour les requêtes directe
    Public Function Execute(Sql)
        Execute = False
        On Error Resume Next
        Dim NbErr
    Reprise:
    If Connexion.State = 0 Then
        OpenConnetion
    End If
    Debug.Print Sql
    Connexion.Execute Sql
     
    Err.Clear
    On Error GoTo 0
    End Function

  7. #7
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci beaucoup pour le code détaillé.

    J'ai adapté le code de façon à retrouver dans GenereCSTRING exactement la même chaîne que dans mon TnsName.ora.
    Je n'arrive toujours pas à ouvrir la connexion.

    Je vais arrêter de t'embêter, j'ai tous les éléments pour réfléchir.

    Encore merci.

    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
    Sub test()
        Dim con As New ADODBRD
        con.BASETYPE = OracleTcpIp
        con.MonPort = "1234"
        con.MonServer = "12.34.56.78"
        con.MonSchema = "ABCDEFGH"
        con.Database = "ABCDEFGH.WORLD"
        con.MonTCP = "TCP"
        con.MonUser = "USER"
        con.MonPassword = "PWD"
     
        con.OpenConnetion
     
        If con.OpenConnetion = False Then
            MsgBox "La connexion à la base de données n'a pas réussi ", vbCritical
            Else
            'Sql = "Select MyTable.* from MyTable Where [MyTable].[MyChamp]='toto';"
            Sql = "SELECT COUNT(*) FROM PH_E8_DEST;"
            Set RS = con.OpenRecordSet(Sql)
            If RS.EOF Then ActiveSheet.Range("j1").CopyFromRecordset RS
        End If
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    Private Connexion
    Private TYPEBASE As MyAdo
    Private Schema
    Private BASE
    Private Server
    Private User
    Private Password
    Private Port
    Private TCP
    Public Enum MyAdo
        ACCESS97 = 1
        ACCESS2000 = 2
        ACCESS2012 = 1
        ODBC = 4
        Oracle = 5
        OracleTcpIp = 13
        SQLSERVER_NT4 = 12
        SQLSERVER2005 = 6
        SQLServer2008R2 = 7
        SQLite = 8
        SQLite3 = 9
        CSV = 10
        Excel8 = 11
    End Enum
     
    Public Property Get MonTCP() As String
        MonTCP = TCP
    End Property
     
    Public Property Let MonTCP(ByVal TCP_ As String)
        TCP = TCP_
    End Property
     
    Public Property Get MonPort() As String
        MonPort = Port
    End Property
     
    Public Property Let MonPort(ByVal Port_ As String)
        Port = Port_
    End Property
     
    Public Property Get MonPassword() As String
        MonPassword = Password
    End Property
     
    Public Property Let MonPassword(ByVal Password_ As String)
        Password = Password_
    End Property
     
    Public Property Get MonUser() As String
        MonUser = User
    End Property
     
    Public Property Let MonUser(ByVal User_ As String)
        User = User_
    End Property
     
    Public Property Get MonServer() As String
        MonServer = Server
    End Property
     
    Public Property Let MonServer(ByVal MonServer_ As String)
        Server = MonServer_
    End Property
     
    Public Property Get MonSchema() As String
        Schema = Schema
    End Property
     
    Public Property Let MonSchema(ByVal Schema_ As String)
        Schema = Schema_
    End Property
     
    Public Property Get Database() As String
        Database = BASE
    End Property
     
    Public Property Let Database(ByVal Database_ As String)
        BASE = Database_
    End Property
     
    Public Property Get BASETYPE() As MyAdo
        BASETYPE = TYPEBASE
    End Property
     
    Public Property Let BASETYPE(ByVal BASETYPE_ As Long)
        TYPEBASE = BASETYPE_
    End Property
     
    Public Function GenereCSTRING()
    'Permet de générer le Cornec String
    '1 - ACCESS 97
    '2 - ACCESS 2000
    '3 - ACCESS 2012
    '4 - ODBC
    '5 - ORACLE
    '6 - SQL SERVER 2005
    '7 - SQL Server 2008 R2
    '8 - SQLite
    '9 - SQLite3
    Select Case TYPEBASE
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & BASE
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";"
        Case ODBC
            GenereCSTRING = "Provider=MSDASQL.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case Oracle
            GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case OracleTcpIp
            GenereCSTRING = BASE & "=(DESCRIPTION=(ADDRESS=(PROTOCOL=" & TCP & ")(HOST=" & Server & ")(PORT=" & Port & "))(CONNECT_DATA=(SERVICE_NAME=" & Schema & ")))"
        Case SQLSERVER_NT4
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        Case SQLSERVER2005
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        Case SQLServer2008R2
            GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & Password & ";"
        Case SQLite
            GenereCSTRING = "Provider=OleSQLite.SQLiteSource.3; Data Source=" & BASE
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & BASE & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & BASE & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "ODBC;DBQ=" & Server & ";Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Case Excel8
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Extended Properties=Excel 8.0;"
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
     
    End Select
    End Function
     
    Public Function RetournRep()
        Dim t
        t = Split(BASE, "\")
        RetournRepFichier = Replace(BASE, t(UBound(t)), "")
    End Function
     
    Public Function RetournFichier()
        Dim t
        t = Split(BASE, "\")
        RetournFichier = t(UBound(t))
    End Function
     
    Public Function OpenConnetion()
        'Ouvre une connexion à  la base de données.
        OpenConnetion = False
        On Error Resume Next
        Dim ConnecString
        Dim NbErr
        Set Connexion = CreateObject("ADODB.Connection")
        Connexion.Open GenereCSTRING 'ConnecString
        Debug.Print GenereCSTRING
        If Err = 0 Then
           OpenConnetion = True
           Connexion.CommandTimeout = 14400
        Else
        Debug.Print Err.Descriptio
        End If
        Err.Clear
            On Error GoTo 0
    End Function
     
    Public Function CloseConnection()
        'Referme la connexion
        CloseConnection = False
        On Error Resume Next
        Connexion.Close
        Set Connexion = Nothing
        If Err = 0 Then
           CloseConnection = True
        End If
        Err.Clear
        On Error GoTo 0
    End Function
     
    Public Function OpenRecordSet(Sql)
        'Retourne un RecordeSet
        On Error Resume Next
            Dim RS
        Dim NbErr
        Err.Clear
        If Connexion.State = 0 Then
            OpenConnetion
        End If
        Debug.Print Replace(Sql, "%", "*")
        Set OpenRecordSet = CreateObject("ADODB.Recordset")
        OpenRecordSet.Open Sql, Connexion, 1, 3
        If Err Then
        MsgBox Err.Description
            If NbErr < 11 Then
                Set OpenRecordSet = Nothing
            End If
        End If
        Err.Clear
        On Error GoTo 0
    End Function
     
    Public Function RetournConnection()
        Set RetournConnection = Connexion
    End Function
     
    'Pas fonctionel
    Public Function OpenRecordSetParametre(Sql, Param)
        Dim Commande
        Dim Params
        Set Commande = CreateObject("ADODB.Command")
        Dim MyParameter
        Set MyParameter = CreateObject("ADODB.Parameter")
        Set Commande.ActiveConnection = Connexion
        Commande.CommandText = "select Requête2.* from Requête2;"
        Commande.CommandType = adCmdText
        Set MyParameter = Commande.CreateParameter("[NumJob]", adNumeric)
        MyParameter.Value = 10
        Commande.Parameters.Append MyParameter
        Set Rs2 = Commande.Execute
    End Function
     
    'Cloture le RecordSet
    Public Function CloseRecordSet(RS)
        On Error Resume Next
            RS.Close
            Set CloseRecordSet = Nothing
        On Error GoTo 0
    End Function
     
    'Pour les requêtes directe
    Public Function Execute(Sql)
        Execute = False
        On Error Resume Next
        Dim NbErr
    Reprise:
        If Connexion.State = 0 Then
            OpenConnetion
        End If
        Debug.Print Sql
        Connexion.Execute Sql
     
        Err.Clear
        On Error GoTo 0
    End Function
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  8. #8
    Invité
    Invité(e)
    Par défaut
    TnsName.ora à pour but de te donner les droits d'accès ta base de données! c'est un fichier de configuration ODBC

    j'ai créé le type de base Oracle pour fonctionner exactement dans ce contexte!


    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
    Sub test()
        Dim con As New ADODBRD
        con.BASETYPE = Oracle
       ' con.MonPort = "1234"
       ' con.MonServer = "12.34.56.78"
       ' con.MonSchema = "ABCDEFGH"
       ' con.Database = "ABCDEFGH.WORLD"
       con.Database = "ABCDEFGH"
       ' con.MonTCP = "TCP"
        con.MonUser = "USER"
        con.MonPassword = "PWD"
     
        con.OpenConnetion
     
        If con.OpenConnetion = False Then
            MsgBox "La connexion à la base de données n'a pas réussi ", vbCritical
            Else
            'Sql = "Select MyTable.* from MyTable Where [MyTable].[MyChamp]='toto';"
            Sql = "SELECT COUNT(*) FROM PH_E8_DEST;"
            Set RS = con.OpenRecordSet(Sql)
            If RS.EOF Then ActiveSheet.Range("j1").CopyFromRecordset RS
        End If
    End Sub

Discussions similaires

  1. [Oracle] erreur de connexion oracle php sous server wamp
    Par sarahG dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/04/2008, 12h28
  2. Problème connexion Oracle sous Eclipse (debutant)
    Par mboubidi dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 23/12/2007, 18h13
  3. connexion oracle sous delphi 2006
    Par jullegeay dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/06/2006, 08h00
  4. bug à la connexion internet sous Windows xp (erreur 0x001405f3)
    Par adrienj dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 11/05/2006, 01h24
  5. Connexion à Oracle depuis EXCEL
    Par Megaxel dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/10/2005, 12h04

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