jueves, 15 de diciembre de 2011

CONEXIONES CON DAO Y ADO

DAO
  DAO incorpora en sus librerías, todos los objetos necesarios para la creación, eliminación y modificación de una estructura de datos, incorporando además herramientas para la utilización de los datos almacenados.


       El objeto principal, de esta estructura jerarquizada de objetos, es DBEngine. Éste objeto, no puede ser elemento de ninguna colección, por lo que no pueden crearse objetos DBEngine adicionales.


       Con los métodos .OpenDatabase y .CreateWorkSpace, del objeto DbEngine, podemos crear llamadas a una base de datos; directamente para almacenar en el espacio de trabajo predefinido, o para añadir espacios de trabajos adicionales a la coleccion de objetos WorkSpace, donde abrir posteriormente la base de datos.


       Los valores devueltos por esos dos métodos son:


       .CreateWorkSpace:


       Añade un nuevo objeto de area de trabajo, a la coleccion de objetos WorsSpace, en el Objeto DbEngine.


       .OpenDatabase:


       Devuelve un objeto Database, que referencia una base de datos, en el área de trabajo predeterminada.


       Dim Db As Database
       Set Db = DbEngine.WorkSpace(0).OpenDatabase("Ruta del fichero de datos")


       O bien, de la siguiente manera para el área de trabajo predeterminada.


       Dim Db As Database
       Set Db = DbEngine.OpenDatabase("Ruta del fichero de datos")


       El objeto Database devuelto por el método .OpenDatabase, posee a su véz otras colecciones de objetos, pero siguiendo el ejemplo, de abrir una base de datos y mostrar registros, vamos a tratar solamente sobre el objeto Recordset (conjunto de registros).


       El método que vamos a usar para rellenar el objeto Recorset, con los registros es: .OpenRecordset, y es aquí donde vamos ejecutar una instrucción SQL para definir los registros que vamos a mostrar.


       Dim Rst As Recordset
       Set Rst = Db.OpenRecordset("SELECT * FROM Personas")


       Para realizar el ejemplo hay que crear una base de datos llamada MisDatos.mdb, que contenga una tabla denominada Personas, y guardarla en la misma carpeta donde vayamos a guardar el proyecto. Crear un proyecto nuevo. Añadir en Referencias una llamada a la libreria: Microsoft DAO 3.51 Object Library. En el formulario poner un control Data y un DbGrid, enlazado al Data. Añadir este código. Guardar el proyecto y ejecutar (F5).


       Se comienza con la declaración de los objetos que vamos a utilizar, uno para la base de datos y otro para el conjunto de registros a usar.


       Option Explicit
       Dim Db As Database
       Dim Rst As Recordset


       A continuación ejecutamos las instrucciones necesarias para cargar la base de datos y rellenar el recorset, asignándolo luego al control Data1.


       Private Sub Form_Load()
              Set Db = DbEngine.OpenDatabase(App.Path & "\MisDatos.mdb")
              Set Rst = Db.OpenRecordset("SELECT * FROM Personas")
              Data1.DatabaseName = App.Path & "\MisDatos.mdb"
              Set Data1.Recordset = Rst
       End Sub


       Con ésto tendremos los datos mostrados en la rejilla de datos.


       Otra forma de mostrar los registros obtenidos, sería registro a registro, en controles TextBox, éstos pueden estar enlazados al igual que el DbGrid a un control Data o mostrar los registro directamente desde el objeto Rst, mediante el siguiente código:


       Supongamos una matriz con controles TextBox, uno por cada campo que exista en la Tabla.


       Dim i As Long
       For i = 0 To Rst.Fields.Count - 1
              Text1(i).Text = Rst(i)
       Next i


ADO
Los que programaban con las interfaces para bases de datos DAO o RDO que venia con Visual Basic Enterprise, tendrán que cambiar a la nueva tecnología de acceso a datos que es ADO (ActiveX Data Objects). Actualmente ADO viene conjuntamente con el Option Pack de Windows NT 4, dentro del Option Pack están los instaladores para Windows 95, Windows NT WorkStation, Windows NT Server.
La nueva versión de Visual Basic (VB 6) trabajará con ADO naturalmente, por eso es importante comenzar todos los nuevos proyectos con esta interface. También la nueva versión de SQL Server (SQL Server 7.0) puede trabajar con ADO, lo que le posibilita al motor de base de datos conectarse a cualquier proveedor OLE DB, por ejemplo, desde un procedimiento almacenado de SQL Server puede acceder a una base de datos Access para consultar datos, o realizar una búsqueda con Microsoft Index Server (indexador de todo tipo de documentos Word, Exel, Etc.) y encontrar documento con un determinado string.
Para conectarse por medio de ADO es necesario un proveedor de OLE DB, en el Option Pack están disponibles tres proveedores (providers):
OLE DB Provider for ODBC: Permite conectarse a cualquier fuente de datos ODBC. Los drivers ODBC están disponibles para la mayoría de los  DBMS en uso hoy.
OLE DB Provider for Microsoft Index Server: El  proveedor para Microsoft Index Server proporciona acceso de solo lectura alos archivos de sistema y documentos Word, Exel, Web, Etc.  Las consultas SQL pueden recibir la  información en forma apropiada para el motor de base de datos.
OLE DB Provider for Microsoft Active Directory Service: Permite acceder a los servicios de directorios, tanto de NT como de Novell.
Caracteristicas
  • Cursores del lado del cliente, como RDO con actualización optimista, objetos Recordset sin conexión y mucho más.
  • Comandos como métodos de conexión, los comandos  asociados con esta conexión se convierten en métodos.
  • Acceso a datos remotos, los usuarios de ADO pueden transmitir datos a través de HTTP a un cliente, trabajar con dichos datos devolverlos al servidor HTTP de nuevo.


Ejemplo de una conexion.
Public Sub ConnectionString()

 Dim cnn1 As ADODB.Connection
 Dim cnn2 As ADODB.Connection
 Dim cnn3 As ADODB.Connection
 Dim cnn4 As ADODB.Connection

 ' Abre una conexión sin usar un Data Source Name (DSN).
 Set cnn1 = New ADODB.Connection
 cnn1.ConnectionString = "driver={SQL Server};" & _
  "server=bigsmile;uid=sa;pwd=pwd;database=pubs"
 cnn1.ConnectionTimeout = 30
 cnn1.Open
 
 ' Abre una conexión usando DSN y ODBC.
 Set cnn2 = New ADODB.Connection
 cnn2.ConnectionString = "DSN=Pubs;UID=sa;PWD=pwd;"
 cnn2.Open
 
 ' Abre una conexión usando DSN y OLE DB.
 Set cnn3 = New ADODB.Connection
 cnn3.ConnectionString = "Data Source=Pubs;User 
 ID=sa;Password=pwd;"
 cnn3.Open
 
 ' Abre una conexión que usa un DSN y argumentos 
 ' individuales en lugar de una cadena de conexión.
 Set cnn4 = New ADODB.Connection
 cnn4.Open "Pubs", "sa", "pwd"
   
 ' Muestra el estado de las conexiones
 MsgBox "cnn1 state: " & GetState(cnn1.State) & vbCr & _
  "cnn2 state: " & GetState(cnn2.State) & vbCr & _
  "cnn3 state: " & GetState(cnn3.State) & vbCr & _
  "cnn4 state: " & GetState(cnn4.State)

 cnn4.Close
 cnn3.Close
 cnn2.Close
 cnn1.Close

End Sub

Public Function GetState(intState As Integer) As String

 Select Case intState
  Case adStateClosed
   GetState = "adStateClosed"
  Case adStateOpen
   GetState = "adStateOpen"
 End Select

End Function