Programación General > Bases de Datos

 Usar ADO con Visual Basic para conectar a bases de datos

(1/1)

m0skit0:
He aquí un pequeño tutorial sacado de mi experiencia estos últimos días con Visual Basic 6 y bases de datos (Oracle en concreto). En teoría usando ADO (ActiveX Data Objects) no debería importar la base de datos a la que se acceda, el procedimiento debería ser el mismo para todas. Lo único que habría que modificar es el proveedor y tener en cuenta las peculiaridades de cada base de datos con respecto al cumplimiento del estándar SQL y las sentencias SQL propietarias.

Precisamente por esto último decidí usar ADO y no DAO, por ejemplo, que puede dar mejor rendimiento si sólo vamos a trabajar con bases de datos Jet (Microsoft Access). Sin embargo, Access no es una base de datos adecuada para un proyecto de gran envergadura; por esto mismo Microsoft decidió desarrollar SQL Server.

Finalmente recalcaros que este mini-tutorial va enfocado hacia bases de datos remotas, en la que nuestro equipo tiene el cliente y en otro se encuentra el servidor de la base de datos.

m0skit0:
Antes de cualquier cosa debemos instalar un cliente de la base de datos a la que vayamos a acceder de forma remota.

Hecho esto, las conexiones las vamos a gestionar a través del proveedor de datos de Windows, el ODBC (Open Database Connectivity): Panel de control -> Herramientas administrativas -> Orígenes de datos ODBC.

Una vez en el administrador de datos de ODBC, veremos una ventana parecida a la siguiente:

[attachment=1:1s3624j8]adminODBC.jpg[/attachment:1s3624j8]
Ahí ya decidimos dónde queremos añadir nuestro origen de datos, si en el DSN (Data Source Name) de usuario, sistema o archivo (fijaos en la explicación en la parte inferior de la ventana para decidir cuál os conviene más). Una vez os decidáis, le dais a "Agregar..." y seleccionais el controlador/driver de la/s base/s de datos que corresponda/n:

[attachment=0:1s3624j8]adddriverODBC.jpg[/attachment:1s3624j8]
Después de seleccionarlo también lo podéis volver a configurar con el botón de "Configurar..." (¿ah, sí?). Es importante recordar el nombre que le hemos puesto a nuestro origen de datos. También suele ser necesario configurar el propio cliente de la base de datos para definir la conexión y demás (IP y puerto del servidor, por ejemplo). Ahí consultad la documentación de vuestra base de datos.

Una vez hecho esto, hay que preparar el entorno de Visual Basic 6 para poder definir los tipos que nos ofrece ADO.

m0skit0:
Ejecutamos el IDE de Visual Basic 6 y creamos un proyecto de prueba para un EXE estándar. Una vez creado, pinchamos en el menú superior en "Proyecto" y luego en "Referencias...", con lo que nos saldrá un diálogo tal que así:

[attachment=0:362a8yiw]refVB.jpg[/attachment:362a8yiw]
Para activar ADO hay que seleccionar "Microsoft ActiveX Data Objects 2.0 Library" y "Microsoft ActiveX Data Objects Recordset 2.5 Library". Aceptamos y listo.

Ahora ya tenemos nuestro entorno tanto de Windows como de VB6 listo para empezar a codificar  :good:

m0skit0:
Vamos directamente con código comentado:


--- Código: Visual Basic ---'Iniciamos la conexión con la base de datos usando un objeto ADODB.ConnectionPrivate Sub Iniciar_Base_Datos(ByRef dbConn As ADODB.Connection)    'Creamos el objeto conexión    Set dbConn = New ADODB.Connection        With dbConn        'Controlador de Oracle para Oracle, también podéis usar el de Microsoft, MSORADB.Oracle        'Microsoft.Jet.OLEDB.4.0 para Access        'SQLOLEDB o MSDASQL para SQL Server        .Provider = "OraOLEDB.Oracle"         'El nombre del origen de datos que hemos especificado en el administrador de datos de ODBC        .Properties("Data Source") = "Nombre_Origen_Datos"         'Usuario para el servidor de la base de datos        .Properties("User Id") = "usuario"         'Contraseña para el servidor de la base de datos        .Properties("Password") = "contraseña"         'Abrimos conexión        .Open    End WithEnd Sub Ahora con


--- Código: Visual Basic ---dbConn.State podemos saber si la conexión ha sido un éxito o un fracaso. Este atributo es un booleano que toma el valor verdadero si la conexión se ha realizado sin problemas y falso en caso de fallo.

Para finalizar la conexión, nada más simple que


--- Código: Visual Basic ---Private Sub Finalizar_Base_Datos(ByRef dbConn As ADODB.Connection)    'Cerramos la conexión    dbConn.Close    'Desreferenciamos el objeto    Set dbConn = NothingEnd Sub 
Vamos ahora al acceso a los datos.

m0skit0:

--- Código: Visual Basic ---'Una conexión, un recordset y una sentencia SQLPrivate Sub Recoger_Datos(ByRef dbConn As ADODB.Connection, ByRef dbRS As ADODB.Recordset, ByVal strSQL As String)    'Creamos el recordset    Set dbRS = New ADODB.Recordset    'Definimos el uso del cursor en local, es decir, se descarga todo el recordset desde el servidor y no se accede a él por cada consulta    dbRS.CursorLocation = adUseClient    'Recuperamos la información según la sentencia SQL estándar que tengamos almacenada en strSQL    dbRS.Open strSQL, dbConn, adOpenStatic, , adCmdTextEnd Sub Con


--- Código: Visual Basic ---dbRS.Fields(Indice).Value obtenemos el valor de los diferentes campos del registro activo. Indice puede ser un entero positivo o también una cadena de caracteres que defina el nombre del campo de datos dentro del registro (la sensibilidad a la capitalización depende de la base de datos).

Para movernos en los registros del recordset devuelto, tenemos:


--- Código: Visual Basic ---'Primer registrodbRS.MoveFirst'Último registrodbRS.MoveLast'Siguiente registrodbRS.MoveNext'Anterior registrodbRS.MovePrevious'Moverse N registros hacia adelantedbRS.Move N Para controlar el tamaño del conjunto de registros (recordset) y su final, tenemos:


--- Código: Visual Basic ---'Número de registros del conjuntodbRS.RecordCount'Posición absoluta del registrodbRS.AbsolutePosition'Devuelve verdadero si la posición actual está justo antes del primer elementodbRS.BOF'Devuelve verdadero si la posición actual está justo después del último elementodbRS.EOF Bueno, creo que he cubierto lo básico, espero les haya sido de utilidad y ya saben:  :comp:  :beer:

Navegación

[0] Índice de Mensajes

Ir a la versión completa