Code VBA pour effectuer une requête sur une base Oracle [Résolu]

Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
- - Dernière réponse : ajor
Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
- 17 juin 2010 à 13:46
Bonjour à tous,

Parmi tous les post que je viens de lire à ce sujet , il y a apparemment plusieurs solutions, le problème, c'est que je comprends pas tout là dedans, je suis parti de ce code, qui apparemment ressemblait un peu à ce que je voulais.

Private Sub Form_Load()
Dim Cnn1 As ADODB.Connection, Cmd1 As ADODB.Command, MonRs As ADODB.Recordset
 
Set Cnn1 = New ADODB.Connection
With Cnn1
    .Provider = "Microsoft.Jet.OLEDB.4.0;"
    .ConnectionTimeout = 30
    .Mode = adModeShareExclusive
    .Open "Data Source=P:\Projet\Liaison_oracle.mdb ;User Id=azeaeaze; Password=azeaeaze"
End With

'par Connection.Execute

'Set MonRs Cnn1.Execute("SELECT INDLIG1 From G_INDIVIDU where nom'MARTINOT'", , adCmdText)
'MonRs.Close

'par command.execute

'Set Cmd1 = New ADODB.Command
'With Cmd1
'    .ActiveConnection = Cnn1
'    .CommandType = adCmdText
'    .CommandText "SELECT INDLIG1 From G_INDIVIDU where nom'MARTINOT'"
'End With
'Set MonRs = Cmd1.Execute
'MonRs.Close

'par recordset.open

Set MonRs = New ADODB.Recordset
MonRs.Open "SELECT INDLIG1 From G_INDIVIDU where nom ='MARTINOT'", Cnn1, , , adCmdText
End Sub


Quand j'exécute, j'obtiens l'erreur suivante :
'Erreur d'exécution 2147217843 (80010108)'
Erreur automation


Et là, je sèche. Auriez-vous une idée du problème ?

Petite question : lorsque je me connecte manuellement (par le menu d'Excel) je rentre le nom d'utilisateur, le mot de passe ainsi que le nom du serveur. Or je vois que dans ma fonction VBA, je ne renseigne pas ce nom de serveur. Je suppose qu'il faudrait le renseigner quelque part, mais où ?

PS : J'ai déjà eu un début de discussion ici mais qui n'a pas donné de suite : http://www.developpez.net/forums/d936137/bases-donnees/oracle/connexions-aux-bases-donnees/dexcel-se-connecter-oracle-passe-via-access-connecte-oracle/
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
3
Merci
Pacadebord m'a fournit en message privé le code qui fonctionne bien dans mon cas, je le mets ici :

(le code est situé dans ThisWorkbook)

Option Explicit

Public cN As ADODB.Connection
Public rs As ADODB.Recordset

Public Function conNect() As Boolean
    
    On Error GoTo conNect_Err
    Set cN = New ADODB.Connection
    cN.ConnectionString = "Provider=msdaora;Data Source=OIUO;User Id=xxxxx;Password=xxxxxx;"
    cN.Open
    conNect = True
    Exit Function
    
conNect_Err:

    MsgBox Err.Number & vbCr & Err.Description
    conNect = True
    
End Function

Public Function DeconNect() As Boolean

    On Error Resume Next
    cN.Close
    Set cN = Nothing
    
End Function

Private Sub Workbook_Open()
Dim strSQL As String
Dim i As Integer
Dim j As Integer

    On Error GoTo Workbook_Open_Err
    
    If conNect() = True Then
    
        Set rs = New ADODB.Recordset
        rs.CursorLocation = adUseClient
        
         
        
        
       strSQL "select email, prenom from g_individu where nom'JORANDO'"
                
        rs.Open strSQL, cN, adOpenForwardOnly, adLockOptimistic
        
        If rs.RecordCount > 0 Then
        
            j = 1
            i = 0
            
          Do While Not rs.EOF And Not rs.BOF
                
    i = i + 1
    Feuil1.Cells(i, j) = rs("email")
    Feuil1.Cells(i, j + 1) = rs("prenom")
    rs.MoveNext
                
Loop
            
        End If
        
        DeconNect
        
    Else
    
        'blablabla
        
    End If
    
    Exit Sub

Workbook_Open_Err:
MsgBox Err.Number & vbCr & Err.Description

End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ajor
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
3
0
Merci
Bonjour,

voici un lien qui t'aidera concernant la chaîne de connexion à une base Oracle


L'expérience, c'est une connerie par jour, mais jamais la même..
Commenter la réponse de lolokun
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Bonjour,

On va commencer par le début.
Quelle est donc la version d'Oracle chez vous ?

Pac
Commenter la réponse de cs_pacadebord
Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
0
Merci
C'est une Base Oracle 10g qui est située sur un serveur distant.

J'ai l'habitude d'accéder à cette base avec une liaison Oracle (ODBC sur Access 2003), ou parfois avec le client Oracle SQL Plus.

Cette fois-ci j'aimerais créer un outil pour que des utilisateurs puisse obtenir une liste (un simple select) dans un fichier Excel.
Commenter la réponse de ajor
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
J'utilise en général l'OLEDB Microsoft. Sur une base Oracle 9i j'ai comme chaîne :
ConnectionString = "Provider=msdaora;Data Source=XXXXX;User Id=XXXXX;Password=XXXXX;"

Bien sur, ca fonctionne si vous créez une référence à "Microsoft ActiveX Data Objects 2.X Library" dans le vba Excel...
Avec OLEDB Oracle, vous devez faire comme indiqué dans le site :
ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=XXXXX;User Id=XXXXX;Password=XXXXX;"
Commenter la réponse de cs_pacadebord
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
ajor,

Vous devez choisir entre vous connecter à Oracle directement et vous connecter à une liaison de table Oracle dans une base Access. Mon précédant post concernait la première solution.
Dans votre code, il y a un mélange des deux...


Pac
Commenter la réponse de cs_pacadebord
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
oups, désolé... mon dernier post n'est pas pour vous...

Pac
Commenter la réponse de cs_pacadebord
Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
0
Merci
Bon, il y a eu erreur de suppression d'un de mes messages.

En tout cas, j'essaie de faire une connexion directe à Oracle, sans passer par ma liaison Access :

Alors j'ai essayé celui-ci : Oracle Data Provider for .NET / ODP.NET
Using ODP.NET without tnsnames.ora

Public cN AS ADODB.Connection
Public rs AS ADODB.Recordset
Public Sub conNect()
    SET cN = New ADODB.Connection
    dbPath = Path
    cN.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=202.123.177.25)(PORT=17711)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=IMXXP)));User Id=aeazeaz;Password=azeaze;"
    cN.Open
End Sub


En exécutant, j'obtiens ce message d'erreur :

[Microsoft][Gestionnaire de pilotesODBC] Nom de source de données trop long


et en essayant Oracle Provider for OLE DB
Oracle XE, VB6 ADO

Code Visual Basic :

Public cN AS ADODB.Connection
Public rs AS ADODB.Recordset
Public Sub conNect()
    SET cN = New ADODB.Connection
    dbPath = Path
    cN.ConnectionString = "Provider=OraOLEDB.Oracle;dbq=212.413.141.144:15211/XE;Database=Mabase;User Id=zerztze;Password=zeztzz;"
    cN.Open
End Sub


J'obtiens l'erreur suivante :

ORA-12560: TNS: Erreur d'adaptateur de protocole


Il doit y avoir quelque chose qui cloche dans mon code, mais où ?
Commenter la réponse de ajor
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Si vous développez et souhaitez vous connecter à une base distante Oracle XE, il me semble qu'il faut installer "Oracle database XE client" sur votre poste de développement et utiliser la chaîne suivante :

Driver=(Oracle in XEClient);dbq=adresse_serveur:1521/XE;Uid=votreId;Pwd=votrePwd;

Ne connaissant pas cette version, cela reste à confirmer

Pac
Commenter la réponse de cs_pacadebord
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
0
Merci
Si vous développez et souhaitez vous connecter à une base distante Oracle 10g à l'aide d'OLE DB Microsoft, la chaîne de connexion est :

ConnectionString = "Provider=msdaora;Data Source=XXXXX;User Id=XXXXX;Password=XXXXX;"

ou
Provider=msdaora;Data Source=XXXXX;Persist Security Info=False;Integrated Security=Yes;


La chaîne dépend de l'installation Oracle.
La valeur de "Data Source" est la valeur "SERVICE_NAME" du fichier TNSNAMES.ORA

Enfin assurez vous de désactiver un éventuel firewall.
J'attends des nouvelles...

Pac
Commenter la réponse de cs_pacadebord
Messages postés
90
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
3 décembre 2017
0
Merci
Apparemment la connexion s'est fait de cette manière. Enfin, je ne suis pas encore sûr, mais l'exécution ne fait plus d'erreur sur Feuil1.

Par contre il y a une erreur sur le ThisworkBook.

'Erreur d'exécution '424'
Objet Requis.


Pour rappel, voici ce que contient Feuil1 :

Public cN As ADODB.Connection
Public rs As ADODB.Recordset
Public Sub conNect()
    Set cN = New ADODB.Connection
    dbPath = Path
    cN.ConnectionString = "Provider=msdaora;Data Source=OIUO;User Id=XXXXX;Password=XXXXX;"
    cN.Open
End Sub


et voici ce que contient ThisWorkBook :

Private Sub Workbook_Open()
Module1.conNect
Set rs = New ADODB.Recordset
rs.Open ("select indlig1 from g_individu where nom ='JORANDO'"), cN
i = 1
While Not rs.EOF
        For j = 1 To rs.Fields.Count - 1
            Feuil1.Cells(i, j) = rs(j - 1)
        Next
i = i + 1
rs.MoveNext
Wend
End Sub 


A votre avis, qu'est-ce qui cloche ?
Commenter la réponse de ajor