CONNEXION ORACLE SANS ODBC

leptidev Messages postés 206 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 décembre 2007 - 24 oct. 2002 à 12:10
bsidy1 Messages postés 20 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 17 août 2012 - 29 août 2008 à 10:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/4859-connexion-oracle-sans-odbc

bsidy1 Messages postés 20 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 17 août 2012
29 août 2008 à 10:27
JE TROUVE VRAIMENT TRES BON CE CODE
CEPENDANT JE DEPLORE QU'ON SOIT TENU OBLIGE D'AVOIR LE CLIENT SUR LA MACHINE POUR QUE LES CHOSES TOURNENT. A DIEU LA PORTABILITE DE VB
MERCI
cs_jmgaudel Messages postés 1 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 12 juin 2007
12 juin 2007 à 15:18
Bonjour,

je développe une appli sous access en VBA qui doit permettre de se connecter à une base Oracle distante à partir de plusieurs postes. j'ai l'impression que ce code pourrait m'aider, cependant n'ayant pas VB d'installé sur mon PC, serait-il possible d'avoir une copie du code en ".txt" sur l'article?

Merci d'avance.
lscherer Messages postés 19 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 3 novembre 2008
23 mai 2007 à 17:15
Pour le port, celui définit par défaut pour Oracle est le plus souvent 1521, sinon on trouve régulièrement aussi 1526
Toutes ces informations peuvent t'être founies par ton admin de base de données
tdeanaz Messages postés 4 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 23 mai 2007
23 mai 2007 à 14:55
Pour le moment ce code ne fonctionne que lorsqu'un client Oracle est installé sur la machine client.
De plus, dans le code que tu fournis, tu n'as pas entré le port de connexion au serveur.
Pour finir, le rouge n'apparait visiblement pas :)
Bon courage!
ouzaamedali Messages postés 10 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 15 février 2012
23 mai 2007 à 14:52
Merci pour tous les informations diffusées sur ce forum car elles sont capitales et utiles pour effectuer la première étape de mon stage.
Reste que je n'arrive toujours pas à me connecter à ma base de données oracle à travers le code si dessus, pouvez vous m?expliquer que dois je remplir à ce code, je vous montre ce que j'ai modifier en rouge:

Private Sub CommandButton1_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As ADODB.Command

Set conn = New ADODB.Connection
Set sql = New ADODB.Command
Set rs = New ADODB.Recordset
TNS_INFO = "(DESCRIPTION=" & _
"(ADDRESS_LIST=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=192.168.0.32)" & _
"(PORT=entrer_ici_le_port)))" & _
"(CONNECT_DATA=(SID= X3)" & _
"(SERVER= controler)))"
conn.ConnectionString = "Provider=msdaora;" & _
"Data Source=" & TNS_INFO & ";" & _
"user id= GC;" & _
"password=tiger"
Debug.Print conn.ConnectionString
conn.Open
End Sub
lscherer Messages postés 19 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 3 novembre 2008
4 mai 2007 à 12:05
Trop bien !
Je vais regarder ça rapidement.
ça m'a l'air pas mal du tout.
Je regarderais aussi pour le client Oracle

Laurent
tdeanaz Messages postés 4 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 23 mai 2007
4 mai 2007 à 10:31
Petite modification:
Le code semble mieux fonctionner en mettant "Provider=oraoledb.oracle;"
tdeanaz Messages postés 4 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 23 mai 2007
3 mai 2007 à 09:53
Bonjour,

Après quelques essais, j'ai trouvé un moyen de pouvoir au moins s'affranchir du fichier tnsnames.ora, la nécessité ou non d'un client Oracle n'a pas encore été testée...

Le code que j'ai pu trouver:

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As ADODB.Command

Set conn = New ADODB.Connection
Set sql = New ADODB.Command
Set rs = New ADODB.Recordset


TNS_INFO = "(DESCRIPTION=" & _
"(ADDRESS_LIST=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=entrer_ici_l_Adresse_IP)" & _
"(PORT=entrer_ici_le_port)))" & _
"(CONNECT_DATA=(SID=entrer_ici_le_SID_de_la_base)" & _
"(SERVER=DEDICATED)))"

conn.ConnectionString = "Provider=msdaora;" & _
"Data Source=" & TNS_INFO & ";" & _
"user id=entrer_ici_le_user_id;" & _
"password=entrer_ici_le_mdp"
Debug.Print conn.ConnectionString

conn.Open

Merci pour les encouragements!
lscherer Messages postés 19 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 3 novembre 2008
2 mai 2007 à 18:24
Bonjour,

Non désole, mais ce source ne peut se dispenser d'avoir un client Oracle Installé ou du moins je n'en connais pas la méthode. Je sais que java n'en n'a pas besoin, mais dans notre cas, je rappel que nous sommes en VB...

Bon courage

Laurent
tdeanaz Messages postés 4 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 23 mai 2007
2 mai 2007 à 17:58
Bonjour,

Je cherche à utiliser le code utilisé ici, mais sur un PC sur lequel il n'y a pas de fichier tnsnames.ora. Est-il possible d'inclure dans le code les informations (IP, SID, etc..) nécessaires à l'établissement de la connexion?
MErci!
acecel Messages postés 140 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 octobre 2006
12 oct. 2005 à 14:36
Je me suis permis de modifier/simplifier ta source selon mes besoins.
celle-ci permet maintenant de se connecter soit à une base Access, soit une autre base.

j'ai créé un type dans mon module normal :


********************************************************
Type ParamètreConnexionADODB
Path As String
Type As String
Provider As String
User As String
Password As String
DataSource As String
End Type
Public pdbParamètreConnexion As ParamètreConnexionADODB
********************************************************

pdbParamètreConnexion contient donc tous les paramètres de connexion (qui sont définis dans le programme, et enregistrés dans la base de registre)

ce module de classe permet juste de renvoyer un recordset, ou exécuter une requete simple.

dans le programme il suffit de déclarer la base :
********************************************************
Public pdbArticle As cDataBase
Set pdbArticle = New cDataBase
pdbArticle.Connexion
********************************************************

et les recordsets :
********************************************************
Dim xrec1 As New ADODB.Recordset
set xrec1 = pdbArticle.OpenRecordset ("Select * from ..")
********************************************************

et pour fermer la base :
********************************************************
pdbArticle.Fermeture
********************************************************







Code à copier dans le module de classe : (cDataBase.cls)


Option Explicit

' /// Variables pour la Connexion ADODB /////////////////////////////////////////////////////////////////////////////////////////
Private pdbConnection As New ADODB.Connection
Private pdbRecordsetADO As New ADODB.Recordset


' /// Ouverture de la Base de Données /////////////////////////////////////////////////////////////////////////

Public Sub Connexion(dbPath As String)
On Error GoTo Connexion_Error

Select Case pdbParamètreConnexion.Type
Case "ACCESS"
pdbConnection.Provider = pdbParamètreConnexion.Provider
pdbConnection.ConnectionString = dbPath
pdbConnection.Open
Case "AUTRE"
pdbConnection.Open "Provider=" & pdbParamètreConnexion.Provider & ";Password=" & pdbParamètreConnexion.Password & ";User ID=" & pdbParamètreConnexion.User & ";Data Source" & pdbParamètreConnexion.DataSource
End Select

On Error GoTo 0
Exit Sub

Connexion_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la procédure Connexion dans Module de classe cDataBase", vbCritical
End Sub


' /// Envoi du RecordSet //////////////////////////////////////////////////////////////////////////////////////

Public Function OpenRecordSet(dbSQL As String, Optional dbOption) As ADODB.Recordset
On Error GoTo OpenRecordSet_Error

If dbSQL <> "" Then
pdbRecordsetADO.CursorLocation = adUseClient
pdbRecordsetADO.CursorType = adOpenDynamic
pdbRecordsetADO.LockType = adLockOptimistic
pdbRecordsetADO.Open dbSQL, pdbConnection
Set OpenRecordSet = pdbRecordsetADO
Set pdbRecordsetADO = Nothing
End If


On Error GoTo 0
Exit Function

OpenRecordSet_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la procédure OpenRecordSet dans Module de classe cDataBase", vbCritical
End Function

' /// Exécution d'une Requête SQL /////////////////////////////////////////////////////////////////////////////

Public Sub Execute(xSQL As String)
On Error GoTo Execute_Error

pdbConnection.Execute xSQL

On Error GoTo 0
Exit Sub

Execute_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la procédure Execute dans Module de classe cDataBase", vbCritical
End Sub



' /// Fermeture de la connexion avec la Base de Données ///////////////////////////////////////////////////////

Public Sub Fermeture()
On Error GoTo Fermeture_Error

pdbConnection.Close
Set pdbConnection = Nothing

On Error GoTo 0
Exit Sub

Fermeture_Error:

MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la procédure Fermeture dans Module de classe cDataBase", vbCritical
End Sub
lscherer Messages postés 19 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 3 novembre 2008
18 mai 2005 à 19:34
Le terme n'est pas approprié, en fait ce n'est pas le TNSNames qu'il faut que tu mettes, mais le nom de l'alias de base de données (celui que tu trouves dans le fichier tnsnames.ora, celui qui s'appelle monalias dans l'exemple ci-dessous), l'adresse IP de ton serveur distant est dans Host, et le nom de ton instance de base de données est dans SID =

tu peux très bien attaquer une base locale, il suffit (pour une personnal oracle) de remplacer la ligne par
objADO.Open "Provider=MSDAORA.1;Password=MonMotDePasse;User ID=MonUser"
En fait on ne spécifie pas le Data Source (alias de Bdd)

Fichier tnsnames.ora dans {ORACLE_HOME}\Network\Admin\

monalias.world (DESCRIPTION
(ADDRESS_LIST (ADDRESS
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = 172.16.63.190)
(Port = 1521)
)
(ADDRESS (COMMUNITY tcp.world)
(PROTOCOL = TCP)
(Host = 172.16.63.190)
(Port = 1526)
)
)
(CONNECT_DATA (SID mabase)
)
)
momolescroc Messages postés 3 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 16 février 2006
18 mai 2005 à 10:57
Un grand merci pour ta source, mais je ne comprend pas bien ce qui est à ecrire pour "montnsname"?
Est-ce que je dois indiquer le chemin d'accé au tnsname de mon client oracle, ou bien le copier en local, ou alors autre chose?
Aussi, a aucun moment j'indique le nom du serveur distant sur lequel est installé ma base. Est ce que ton appli est prevu pour une base locale?
merci
leptidev Messages postés 206 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 décembre 2007
24 oct. 2002 à 12:10
Merci trop bien ta source, c ce que je cherche
Rejoignez-nous