2010-08-03 66 views
10

Estoy intentando conectar varios proyectos de VBA a un back-end de Oracle 10g usando ADO (2.8) y sin TNS. Después de varios intentos, hemos decidido que la serie paso más simple para una instalación limpia incluyen:Sintaxis de la cadena de conexión para Classic ADO/ODBC/Oracle 10g EZConnect

  1. configuración de un cliente Oracle Instant
  2. Instalar el controlador ODBC de acompañamiento
  3. (Prueba de la conexión utilizando EZConnect a través SQL Plus)
  4. (Probar la conexión mediante la creación de un DSN de Windows)

Todo hasta aquí funciona bien. El problema es que no puedo entender la sintaxis para decirle a ADO que use el cliente instantáneo controlador ODBC, que aparece en mi lista de controladores ODBC como "Oracle en MyTest" (sin comillas). El uso del controlador ODBC de MSFT con EZConnect como this post sugiere que no funciona mejor de lo que lo hacía antes de configurar el cliente instantáneo (es decir, no del todo). Pero this post parece sugerir que es posible, sin indicar exactamente cómo y connectionstrings.com sólo le dice lo que la parte de origen de datos de la cadena se parece, es decir CiertoUsuario/SomePassword @ ASERVER: PortNumber/nombreDeInstancia

versión corta: ¿Cuál es el sintaxis exacta de una cadena de conexión ADO clásica que hace referencia a un controlador ODBC de cliente instantáneo?

Gracias de antemano por su ayuda. Me llevó mucho tiempo estúpida para ponerse en marcha con SO ...

+0

Esta publicación http://forums.oracle.com/forums/thread.jspa?threadID=621679&tstart=90 parece explicar por qué el controlador ODBC de MSFT no le gusta el cliente instantáneo de ORCL: ofrece dlls que no admite para ODBC sin incluir sus dependencias. Desafortunadamente, nada de lo que podría hacer sería obtener el controlador de MSFT para ver esas dependencias, incluso una vez que las copié en la carpeta IC. – downwitch

+0

En el trabajo (estoy en casa ahora, mi zona horaria es CET) lo hacemos todo el tiempo. Existe (un) Access DB existente y, a veces, cuando se agrega un nuevo Oracle DB, básicamente agrego en el centro de control una conexión ODBC (algo así como se describe aquí http://support.microsoft).com/kb/303968) luego voy y luego copio el objeto de paso en Access DB y cambio el nombre de la base de datos en esta cadena interminablemente larga. Supongo que estás buscando esta larga cadena. Bueno, si tu pregunta sigue sin respuesta mañana, es posible que deba pegar esa cadena y podría ser útil. – hol

+0

Gracias por su ayuda, pero en realidad estoy buscando conectarme directamente con el servidor de Oracle en su sintaxis "más nativa", que es EZ Connect o un tipo de TNS integrado de cadena de conexión, como este artículo describe el uso de http: // www.codeproject.com/KB/vbscript/connection_string.aspx pero que falla como lo describo en mi primer comentario. – downwitch

Respuesta

2

Prueba esto y reemplazar los valores según sea apropiado:

Set Connection = CreateObject("ADODB.Connection") 

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

Si Oracle en instantclient no funciona comprobar el HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBCINST.INI \ ODBC Drivers clave de registro para ver cuál es el valor de Oracle Instant Client (puede haber un número de versión adjunto).

Si esto todavía no funciona para usted. Deja un comentario con los detalles de lo sucedido e intentaré ajustar la respuesta por ti.

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

similares a 'La respuesta de user1206604 - puedo configurar una conexión ODBC mediante el Administrador de orígenes de datos ODBC (por el bien de ejemplo vamos a nombramos 'DEMO') y conectar de esta manera:

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 

El administrador de orígenes de datos ODBC se encuentra (en mi máquina) en el menú inicio> Programas> Oracle - oraClient10g> configuración y migración Herramientas> administrador de ODBC Microsoft y se ve así:

ODBC Data Source Administrator

+0

Esto me salvó la vida. ¡Gracias! Solo tuve que declarar "Dim connStr, yourQueryString As String" y agregar "api.MoveNext" al ciclo. – SeaBass

Cuestiones relacionadas