SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Bases de Datos => Mensaje iniciado por: m0skit0 en Martes 17 de Marzo de 2009, 16:43

Título: Usar ADO con Visual Basic para conectar a bases de datos
Publicado por: m0skit0 en Martes 17 de Marzo de 2009, 16:43
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.
Título: 1. Preparando el entorno
Publicado por: m0skit0 en Martes 17 de Marzo de 2009, 17:08
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) (http://es.wikipedia.org/wiki/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) (http://es.wikipedia.org/wiki/DSN) 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.
Título: 2. Configurando Visual Basic para ADO
Publicado por: m0skit0 en Martes 17 de Marzo de 2009, 17:16
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 (http://es.wikipedia.org/wiki/Recordset) 2.5 Library". Aceptamos y listo.

Ahora ya tenemos nuestro entorno tanto de Windows como de VB6 listo para empezar a codificar  :good:
Título: 3. Iniciar y finalizar una conexión a la base de datos
Publicado por: m0skit0 en Martes 17 de Marzo de 2009, 17:31
Vamos directamente con código comentado:

Código: Visual Basic
  1. 'Iniciamos la conexión con la base de datos usando un objeto ADODB.Connection
  2. Private Sub Iniciar_Base_Datos(ByRef dbConn As ADODB.Connection)
  3.     'Creamos el objeto conexión
  4.    Set dbConn = New ADODB.Connection
  5.    
  6.     With dbConn
  7.         'Controlador de Oracle para Oracle, también podéis usar el de Microsoft, MSORADB.Oracle
  8.        'Microsoft.Jet.OLEDB.4.0 para Access
  9.        'SQLOLEDB o MSDASQL para SQL Server
  10.        .Provider = "OraOLEDB.Oracle"
  11.  
  12.         'El nombre del origen de datos que hemos especificado en el administrador de datos de ODBC
  13.        .Properties("Data Source") = "Nombre_Origen_Datos"
  14.  
  15.         'Usuario para el servidor de la base de datos
  16.        .Properties("User Id") = "usuario"
  17.  
  18.         'Contraseña para el servidor de la base de datos
  19.        .Properties("Password") = "contraseña"
  20.  
  21.         'Abrimos conexión
  22.        .Open
  23.     End With
  24. End Sub
  25.  
Ahora con

Código: Visual Basic
  1. dbConn.State
  2.  
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
  1. Private Sub Finalizar_Base_Datos(ByRef dbConn As ADODB.Connection)
  2.     'Cerramos la conexión
  3.    dbConn.Close
  4.     'Desreferenciamos el objeto
  5.    Set dbConn = Nothing
  6. End Sub
  7.  

Vamos ahora al acceso a los datos.
Título: 4. Acceso a la información de la base de datos
Publicado por: m0skit0 en Martes 17 de Marzo de 2009, 17:51
Código: Visual Basic
  1. 'Una conexión, un recordset y una sentencia SQL
  2. Private Sub Recoger_Datos(ByRef dbConn As ADODB.Connection, ByRef dbRS As ADODB.Recordset, ByVal strSQL As String)
  3.     'Creamos el recordset
  4.     Set dbRS = New ADODB.Recordset
  5.     '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
  6.     dbRS.CursorLocation = adUseClient
  7.     'Recuperamos la información según la sentencia SQL estándar que tengamos almacenada en strSQL
  8.     dbRS.Open strSQL, dbConn, adOpenStatic, , adCmdText
  9. End Sub
  10.  
Con

Código: Visual Basic
  1. dbRS.Fields(Indice).Value
  2.  
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
  1. 'Primer registro
  2. dbRS.MoveFirst
  3. 'Último registro
  4. dbRS.MoveLast
  5. 'Siguiente registro
  6. dbRS.MoveNext
  7. 'Anterior registro
  8. dbRS.MovePrevious
  9. 'Moverse N registros hacia adelante
  10. dbRS.Move N
  11.  
Para controlar el tamaño del conjunto de registros (recordset) y su final, tenemos:

Código: Visual Basic
  1. 'Número de registros del conjunto
  2. dbRS.RecordCount
  3. 'Posición absoluta del registro
  4. dbRS.AbsolutePosition
  5. 'Devuelve verdadero si la posición actual está justo antes del primer elemento
  6. dbRS.BOF
  7. 'Devuelve verdadero si la posición actual está justo después del último elemento
  8. dbRS.EOF
  9.  
Bueno, creo que he cubierto lo básico, espero les haya sido de utilidad y ya saben:  :comp:  :beer: