Yo deseo hacer lo mismo pero usando ADO y ODBC en vez de RDO
Espero me puedan ayudar. de antemano muchas gracias
Aquí te mostramos un ejemplo de conexión de Visual Basic 6 con Oracle mediante ADO sin necesidad de utilizar ODBC:
Código:
Private Sub btConexionOracleADO_Click()
Dim cadenaConexion As String
Dim sql As String
Dim conexionADO As New ADODB.Connection
Dim recordsetDatos As New ADODB.Recordset
On Error GoTo cError
'Indicamos el nombre de la base de datos Oracle (SID)
cadenaConexion = "Data Source=BDAJPDSOFT;"
'Indicamos el proveedor de datos OLEDB
conexionADO.Provider = "OraOLEDB.Oracle"
'Realizamos la conexión con los datos anteriores,
'el usuario de Oracle y la contraseña
conexionADO.Open cadenaConexion, "alonso", "ajpdsoft"
'Indicamos la consulta SQL que se ejecutará
sql = "SELECT * FROM facturas"
'Ejecutamos la consulta SQL y guardamos el resultado en el recordset
recordsetDatos.Open sql, conexionADO, 3, 3
'Nos movemos al primer registro del recordset
recordsetDatos.MoveFirst
'Mostramos el número de registros de la consulta SQL
MsgBox CStr(recordsetDatos.RecordCount)
'Cerramos la conexión de la aplicación VB con Oracle
recordsetDatos.Close
Set recordsetDatos = Nothing
conexionADO.Close
Set conexionADO = Nothing
cSalir:
Exit Sub
cError:
MsgBox Err.Description
GoTo cSalir
End Sub
Donde:
* BDAJPDSOFT: será el nombre de servicio de red de Oracle. Este nombre se establece al crear la conexión mediante la utilidad del cliente de Oracle "Net Configuration Assistant".
* "alonso": nombre del usuario de Oracle con permisos suficientes para realizar las tareas que desees.
* "ajpdsoft": contraseña del usuario de Oracle anterior.
* "SELECT * FROM facturas": consulta SQL a ejecutar, en tu caso será la que quieras.
* "3, 3": estos parámetros en "recordsetDatos.Open" indican el tipo de interacción que realizarás con los datos, si es una consulta de sólo lectura (como la que te indicamos en el ejemplo) será "3, 3". Si quieres insertar un registro (modificar el recordset): "2, 3".
Nota importante: para que el código anterior funcione debes agregar una referencia a "Microsoft ActiveX Data Object" en el menú "Proyecto" - "Referencias", marca "Microsoft ActiveX Data Object 2.8 Library" (o la versión de que dispongas).
Ultima edición por alonsojpd el Jue Jun 11, 2009 6:50 pm, editado 1 vez
Publicado:
Jue Jun 11, 2009 6:27 pm
HuachoSoft Usuario
Registrado: May 29, 2009 Mensajes: 4
Asunto:
gracias alonsojpd
una duda.
Yo antes he trabajado con oracle 8i y 9i. y para hacer los selects a las tablas lo hacia como indicas en tu post.
Pero he visto que en la version 10g usan select * from usuario.tabla en los selects, o select * from package.tabla. Si en la base de datos hacen esto, en el visual basic sólo debo hacer select * from tabla???
Publicado:
Jue Jun 11, 2009 6:38 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Conexion oracle desde vb usando ADO
Anuncios
Te indicamos los posibles errores que te puedes encontrar:
* "ORA-12154: TNS:could not resolve service name": este error es debido a que el nombre del servicio de red que has indicado en la línea:
Código:
cadenaConexion = "Data Source=BDAJPDSOFT;"
No existe en el equipo, aquí debes indicar el nombre de red de Oracle en el equipo cliente.
Este artículo indica cómo crear ese nombre de red y cómo instalar Oracle Client:
No existen en Oracle. Recuerda que este usuario y contraseña debe existir en Oracle Database.
* "ORA-00942: table or view does not exist": este error es debido a que la tabla o vista que has introducido en la consulta SQL no existe en Oracle o bien el usuario que has utilizado no tiene permisos para verla:
* "Provider cannot be found. It may not be properly installed.": este error suele ser debido a que no tienes instalado Oracle Client en el equipo client que ha de conectarse a Oracle Database (servidor de Oracle). También puede ser debido a que faltan los ficheros de ADO de Microsoft en el equipo.
Publicado:
Jue Jun 11, 2009 6:41 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto:
HuachoSoft escribió:
gracias alonsojpd
una duda.
Yo antes he trabajado con oracle 8i y 9i. y para hacer los selects a las tablas lo hacia como indicas en tu post.
Pero he visto que en la version 10g usan select * from usuario.tabla en los selects, o select * from package.tabla. Si en la base de datos hacen esto, en el visual basic sólo debo hacer select * from tabla???
En realidad sólo es necesario utilizar la nomenclatura "usuario.tabla" cuando el usuario que has utilizado para la conexión a Oracle no es el propietario de las tablas. Si el usuario que has utilizado tiene en su esquema las tablas que vas a utilizar en el select no te será necesario utilizar "usuario.tabla", en caso contrario sí.
Publicado:
Jue Jun 11, 2009 6:44 pm
HuachoSoft Usuario
Registrado: May 29, 2009 Mensajes: 4
Asunto:
ok, muchisimas gracias.
Una ultima consulta.
A que se puede deber que cuando hago un select me devuelva como recordcount der recordset -1??? pero como valor eof false???
Ademas, cuando ejecuto el mismo select en el microsoft query (interface de excel para conectarse a base de datos externas) si muestra valores.
Publicado:
Jue Jun 11, 2009 7:20 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto:
HuachoSoft escribió:
ok, muchisimas gracias.
Una ultima consulta.
A que se puede deber que cuando hago un select me devuelva como recordcount der recordset -1??? pero como valor eof false???
Ademas, cuando ejecuto el mismo select en el microsoft query (interface de excel para conectarse a base de datos externas) si muestra valores.
¿has utilizado el "recordsetDatos.MoveFirst"? aunque parezca innecesario sí lo es para llenar el recordset.
Publicado:
Jue Jun 11, 2009 7:32 pm
HuachoSoft Usuario
Registrado: May 29, 2009 Mensajes: 4
Asunto:
no era eso.
revizando mas, le hice un cambio a
Cita:
rs.Open sql, cnx, adOpenStatic, adLockReadOnly
ya que solo lo tenia hasta
Cita:
rs.Open sql, cnx
Ahora si devuelve información. Parece que no devolvia nada por privilegios con el usuario. Es la primera vez que me pasa esto, ya que usualmente solo lo uso hasta la conexion. Los demas valores no los pongo.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A