Page 1 of 1

Nuevamente ADO+Oracle [SOLUCIONADO]

Posted: Thu Aug 16, 2007 1:55 pm
by metaldrummer
Hola Nuevamente:
Según el código que expongo a continuación:

Code: Select all

FUNCTION Sql2( cComando)
   LOCAL lOK:=.T., oCon, oDatos, aResultados:=Array(3)
   oCon:=toleauto():new("adodb.connection")
   //oCon:=CreateObject("adodb.connection")
   //oCon:ConnectionString:=cStringConexionLocal
   oCon:ConnectionString:="Provider=OraOLEDB.Oracle;Data Source=192.168.0.8:1521/servicio;User ID=miusuario;Password=mipassword;"
   oCon:Open()

   //oDatos:=CreateObject("adodb.recordset")
   oDatos:=toleauto():new("adodb.recordset")
   oDatos:LockType := adLockOptimistic
   oDatos:CursorType := adOpenKeyset
   oDatos:ActiveConnection(oCon)
   oDatos:Source := cComando
   TRY
      oDatos:Open()
   CATCH oError
      MsgStop( "Línea 148: Error al abrir el recordset", "¡Error Crítico!")
      lOK:=.F.
      oCon:=NIL
   END
   aResultados[1]:=lOk
   IF lOk
      aResultados[2]:=oCon
      aResultados[3]:=oDatos
   ENDIF
RETURN aResultados
Tengo instalado el OleDB Provider de Oracle (nativo), string de conexión funciona ya que he verificado el estado de la conexión y se abre. Lamentablemente al momento de realizar el oDatos:Open() falla y no logra ejecutar la sentencia SQL.
Hay alguna manera de realizar esto a través del adodb.command?. Lo importante es que debo de alguna manera pasar el

Code: Select all

oDatos:LockType := adLockOptimistic
oDatos:CursorType := adOpenKeyset
para que oDatos:RecordCount no regrese -1.
Ayuda por favor ya que veo que todo está bien hecho e igual falla.
Saludos
David Lagos S.
Coquimbo-Chile

Posted: Thu Aug 16, 2007 2:47 pm
by R.F.
Que valores tienen las constantes adLockOptimistic y adOpenKeySet ?

Posted: Thu Aug 16, 2007 3:52 pm
by metaldrummer
Gracias René por tu interés.
Ya resolví el problema. Sencillamente tenía que copiar todas las dll's que instala el oledb provider de oracle a la misma carpeta donde reside mi .exe
¿Porqué?, lo desconozco. Quizás el instalador del provider no las registra adecuadamente, etc.
Un detalle muy importante:
Si no expecifico:

Code: Select all

oDatos:CursorLocation  := adUseClient
Sencillamente oDatos:RecordCount devuelve igual -1.
Esto también sucede en MySql con el cliente ODBC 3.51

Haciendo eso, pasó inmediatamente.
Saludos
Nos vemos en octubre por acá.
David Lagos S.
Coquimbo-Chile