2010-08-03 27 views
10

J'essaie de connecter plusieurs projets VBA à un backend Oracle 10g en utilisant ADO (2.8) et sans TNS. Après plusieurs tentatives, nous avons décidé que la simple série d'étapes pour une nouvelle installation comprennent:Syntaxe de chaîne de connexion pour Classic ADO/ODBC/Oracle 10g EZConnect

  1. Mettre en place un client Oracle Instant
  2. Installez le pilote ODBC d'accompagnement
  3. (Test de la connexion à l'aide EZConnect via SQL plus)
  4. (Testez la connexion en créant une source de données de Windows)

Tout fonctionne jusqu'à ici bien. Le problème est, je ne peux pas comprendre la syntaxe pour dire à ADO d'utiliser le pilote ODBC client instantané, qui apparaît dans ma liste de pilotes ODBC comme "Oracle dans MyTest" (sans guillemets). L'utilisation du pilote ODBC MSFT avec EZConnect comme this post suggère ne fonctionne pas mieux qu'avant la configuration du client instantané (c'est-à-dire pas du tout). Mais this post semble suggérer qu'il est possible, sans indiquer exactement comment et connectionstrings.com ne vous indique ce que la partie source de données de la chaîne ressemble, à savoir UnUtilisateur/unMotdepasse @ ASERVER: PortNumber/InstanceName

Version courte: Quelle est la syntaxe exacte d'une chaîne de connexion ADO classique faisant référence à un pilote ODBC client instantané?

Merci d'avance pour votre aide. Il m'a fallu un stupide temps pour aller avec SO ...

+0

Cet article http://forums.oracle.com/forums/thread.jspa?threadID=621679&tstart=90 semble expliquer pourquoi le pilote ODBC de MSFT n'aime pas le client instantané ORCL - il fournit des DLL qu'il ne supporte pas pour ODBC sans inclure leurs dépendances. Malheureusement, rien de ce que je pourrais faire ne permettrait au pilote de MSFT de voir ces dépendances même après les avoir copiées dans le dossier IC. – downwitch

+0

Au travail (je suis à la maison maintenant, mon fuseau horaire est CET) nous le faisons tout le temps. Il ya (un existant) Access DB et parfois quand une nouvelle base de données Oracle est ajoutée, j'ajoute fondamentalement au centre de contrôle une connexion ODBC (un peu comme décrit ici http://support.microsoft.com/kb/303968) Ensuite, je vais et puis aller copier l'objet relais dans la base de données Access et modifier le nom de la base de données dans cette chaîne sans fin. Je suppose que vous cherchez cette longue chaîne. Eh bien, si votre question est encore sans réponse demain, je pourrais avoir besoin de coller cette chaîne et cela pourrait aider. – hol

+0

Merci pour votre aide, mais je cherche en fait à me connecter directement au serveur Oracle dans sa syntaxe "la plus native", soit EZ Connect, soit un type de TNS intégré à la chaîne de connexion comme décrit dans cet article en utilisant http: // www.codeproject.com/KB/vbscript/connection_string.aspx mais qui échoue comme je le décris dans mon premier commentaire. – downwitch

Répondre

2

Essayez et remplacer les valeurs selon le cas:

Set Connection = CreateObject("ADODB.Connection") 

blnTest = Connection.Open("Driver={Oracle in instantclient};Dbq=127.0.0.1:1521/SERVICENAMEHERE", "USERNAME", "PASSWORD") 

Si Oracle instantclient ne fonctionne pas vérifiez la HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ La clé de registre ODBCINST.INI \ ODBC Drivers pour voir quelle est la valeur pour Oracle Instant Client (il peut y avoir un numéro de version ajouté).

Si cela ne fonctionne toujours pas pour vous. Laissez un commentaire avec les détails de ce qui s'est passé et je vais essayer d'ajuster la réponse pour vous.

0
' Create a connection object.' 
Dim cn As ADODB.Connection 
Set cn = New ADODB.Connection 

' Create a recordset object.' 
Dim rs As ADODB.Recordset 
Set rs = New ADODB.Recordset 

' Provide the connection string.' 
Dim strConn As String 
Dim str As String 

'Use the SQL Server OLE DB Provider.' 
strConn = "Driver=(Oracle in OraHome92);" & "Data Source=;Uid=;Pwd=;" 

'Now open the connection.' 
cn.Open strConn 
With rs 

    ' Assign the Connection object.' 
    ActiveConnection = cn 

    ' Extract the required records.' 
    .Open "SELECT ", cn 


End With 
4

similaires à la « réponse de user1206604 - je configurer une connexion ODBC à l'aide source de données ODBC Administrator (pour l'amour de exemple, nous nommons « DEMO ») et connecter comme ceci:

Dim conn As New adodb.Connection 
Set conn = New adodb.Connection 

connStr = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=yourUserID;Password=yourPassword;" 
conn.Open connStr 

Dim api As New adodb.Recordset 
Set api = New adodb.Recordset 

yourQueryString = "SELECT foo FROM bar" 
api.Open yourQueryString, conn, adOpenDynamic, adLockReadOnly 
'adjust above setting as needed 

while not api.EOF 
    'do interesting stuff here 
wend 

'clean up resources 
api.Close 
Set api = Nothing 

conn.Close 
Set conn = Nothing 

Le administrateur de source de données ODBC se trouve (sur ma machine) dans le menu Démarrer> Programmes> Oracle - oraClient10g> Outils de configuration et de migration> Microsoft ODBC Administrator et ressemble à ceci:

ODBC Data Source Administrator

+0

Cela m'a sauvé la vie. Je vous remercie! Il suffit de déclarer "Dim connStr, yourQueryString As String" et ajouter "api.MoveNext" à la boucle. – SeaBass