Seguramente ya habrás visto cómo usar el ADO data control para acceder a bases de datos, ahora vamos a ver cómo hacerlo sin necesidad de usar el data control. es decir, con código puro y duro.
Para ello, vamos a usar una referencia a la librería ActiveX Data Object 2.0, ya que con esa versión podemos usar eventos en los recordsets, con idea de que sea más fácil moverse por los registros y demás cosillas que nos permiten los eventos.
También vamos a ver cómo podemos "ligar" los controles a ese recordset.
El código de ejemplo.
Para usar el código de este ejemplo, crea un nuevo proyecto.
En Proyecto/Referencias, selecciona: Microsoft ActiveX Data Objects 2.0 LibraryAñade los controles necesarios para que tenga un aspecto como el siguiente:
Los nombres de los controles son:
Los botones para desplazarse por los registros de la base de datos: cmdMove, un array de cuatro controles, de cero a tres.
El botón de Actualizar se llama: cmdUpdate
El de Añadir: cmdAdd
El de Eliminar: cmdDel
Las cajas de texto igual que el texto mostrado, los Text1 son un array de cero a dos.Espero que no tengas problemas para crear el form de prueba, pero de todas formas, en el zip con el código está el formulario, si es que no quieres "entretenerte" en crearlo.
Ahora añade el siguiente código al formulario.
Nota:
Como comprobarás, hay una constante de compilación condicional para poder usar los Text1 ligados al Recordset o no hacerlo.
Simplemente cambia el valor de dicha constante a -1, para usar los controles ligados o asígnale un valor 0, para que no se usen los controles ligados, en ese caso, tendrás que pulsar en el botón "Actualizar" para que los cambios realizados se actualicen en la base de datos.
Cuando los controles están ligados, al cambiar de registro, el contenido de las cajas de texto se actualizan en los campos correspondientes.Nota2:
Básicamente para usar ADO en tus proyectos tendrás que usar un objeto del tipo Connection, que será el que se usará para abrir la base de datos y un objeto del tipo Recordset pra abrir la tabla que quieres manipular. Al abrir este último se le indica lo que quieres que te muestre, es decir, puedes indicarle los registros a los que quieres acceder y el campo por el que esté clasificado, etc. También a la hora de abrir el recordset le indicarás de que tipo lo quieres, etc.'------------------------------------------------------------------------------ ' Prueba de acceso a base de datos usando código ADO (30/Ago/99) ' ' ©Guillermo 'guille' Som, 1999 '------------------------------------------------------------------------------ Option Explicit ' Para probar usando controles ligados al recordset ' Si se ligan los Text1 al recordset, asignar -1 a esta constante ' Si no se ligan los Text1, asignar 0 (o simplemente comentar la línea) #Const TextLigados = -1 Private sBase As String ' Nombre de la base de datos ' Objetos para acceder directamente a la base usando código Private cnn As ADODB.Connection ' Si se declara con WithEvents, tenemos acceso a los mismos eventos que ' con el ADO DataControl Private WithEvents rst As ADODB.Recordset ' Constantes para el movimiento dentro del recordset Const cPrimero = 0 Const cAnterior = 1 Const cSiguiente = 2 Const cUltimo = 3 Private Sub cmdAdd_Click() ' Añadir un nuevo registro al recordset rst.AddNew ' Si no están ligados los controles al recordset #If TextLigados = 0 Then Text1(0) = "" Text1(1) = "" Text1(2) = "" cmdUpdate_Click #End If Text1(0).SetFocus End Sub Private Sub cmdDel_Click() ' Eliminar el registro actual rst.Delete On Local Error Resume Next ' Mover al siguiente registro rst.Move 1 ' Si no puede moverse al siguiente, moverlo al anterior If Err Then rst.MovePrevious End If Err = 0 End Sub Private Sub cmdMove_Click(Index As Integer) ' Moverse por el recordset On Local Error Resume Next Err = 0 Select Case Index Case cPrimero ' Primero rst.MoveFirst Case cAnterior ' Anterior rst.MovePrevious Case cSiguiente ' Siguiente rst.MoveNext Case cUltimo ' Último rst.MoveLast End Select If Err Then Debug.Print Err.Description End If Err = 0 End Sub Private Sub cmdUpdate_Click() ' Esto no es necesario si los Text1 están ligados al recordset, ' cuando se cambie de registro, se actualizarán los datos ' De todas formas, se puede dejar para actualizar los datos cuando se quiera. ' ' Cuando no se liguen los controles, después de introducir los datos, ' es necesario pulsar en este botón rst!Nombre = Text1(0) ' Como el nombre de este campo tiene signos especiales, ' hay que ponerlo entre corchetes rst![e-mail] = Text1(1) rst!Comentario = Text1(2) End Sub Private Sub Form_Load() ' Asignar el nombre de la base de datos ' (si la aplicación se ejecuta en el directorio raiz, quitar el \) sBase = App.Path & "\db2000.mdb" ' Crear los objetos Set cnn = New ADODB.Connection Set rst = New ADODB.Recordset cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sBase rst.Open "SELECT * FROM Table1", cnn, adOpenDynamic, adLockOptimistic ' Si se quiere usar los Text1 ligados al Recordset #If TextLigados Then ' Conectar manualmente los Text1 al recordset Dim i As Long ' Asignar el recordset al que estarán los datos conectados ' Esto funciona igual que si se conectaran a un DataControl, ' Por tanto no hay que preocuparse de actualizar el contenido, etc. For i = 0 To 2 Set Text1(i).DataSource = rst Next ' Asiganr los nombres de los campos Text1(0).DataField = "Nombre" Text1(1).DataField = "e-mail" Text1(2).DataField = "Comentario" ' ' Deshabilitar el botón de Actualizar cmdUpdate.Enabled = False #End If End Sub Private Sub Form_Unload(Cancel As Integer) On Local Error Resume Next rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing Err = 0 Set fADO = Nothing End Sub Private Sub rst_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) ' Mostrar el ID del registro actual ' si se pasa del primero o del último, dará error On Local Error Resume Next ' Mostrar el ID del registro actual usando el recordset pasado como parámetro 'Text2.Text = "ID: " & pRecordset!ID ' También se puede usar: Text2.Text = "ID: " & rst!ID ' Si no están ligados los Text1 #If TextLigados = 0 Then ' Si no produce error actualizar los Text1 ' (no es necesario si los Text1 están ligados al Recordset) If Err = 0 Then Text1(0) = rst!Nombre Text1(1) = rst![e-mail] Text1(2) = rst!Comentario End If #End If Err = 0 End SubPulsa este link para bajarte el código y una base de ejemplo. (ADO_sindatacontrol.zip 12.0 KB)