Inserción, modificación y borrado de registros



05/01/2011 

En este capitulo veremos la inserción, modificación y borrado de registros y además las propiedades CursorType y LockType.

Esta es una manera de cómo podemos modificar, insertar y borrar registros.
La mejor manera para mi seria con una sentencia SQL pero eso lo veremos mas adelante

Inserción de una fila a un conjunto de registros
Una forma de modificar un conjunto de registros es añadiendo una nueva fila de capos. Este ejemplo aplica al método AddNew añadiendo un registro ala tabla Shippers de la base de datos Northwind. Utilizaremos el método AddNew y el metodo Update. En este ejemplo se utilizo una función para poder así devolver un valor como el id que se asigna automáticamente.

Function AddShippers()
'declaramos las variables
Dim registros As ADODB.Recordset
'configuramos el cursor que no sea de solo lectara
Set registros = New ADODB.Recordset
With registros
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\Northwind.mdb"
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "Shippers", , , , adCmdTable
End With
'llamamos al metodo AddNew
With registros
.AddNew
.Fields("CompanyName") = "Access 2003 CursoADO"
.Fields("Phone") = "(824) 102-55-55"
.Update
End With
'devoldemos el id del registro que anexamos
AddShippers = registros("ShipperID")
'liberamos los objetos
registros.Close
Set registros = Nothing
End Function

Borrado de una fila
Esta tarea que probablemente desee realizar con los conjuntos de registros es borrar registros. Aquí tenemos el siguiente ejemplo que no requiere una sintaxis SQL para llevar acabo el borrado de registro coincidente con un criterio. El ejemplo utiliza el dato anexado por el código anterior, también el cual da un tiempo de 6 segundos para eliminar el registro

Primera parte para llamar al procedimiento sub DeleteRecord
Sub CallDeleteRecord()
'declaramos las variables
Dim registros As ADODB.Recordset
Dim entero As Integer
'configuramos el cursor para que no sea de solo lectura
Set registros = New ADODB.Recordset
With registros
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\Northwind.mdb;"
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "Shippers", , , , adCmdTable
End With
'borramos una compañia buscado por CompanyName o Phone
DeleteRecord registros, "CompanyName", "Access 2003 CursoADO"
DeleteRecord registros, "Phone", "(824) 102-55-55"
'actualizamos el conjutno de registros para limpiar la fila marcada
registros.Requery
'borramos fila por su id
entero = AddShippers()
DoLoopForSeconds 6
DeleteRecord registros, "ShipperID", entero
'liberamos los objetos
registros.Close
Set registros = Nothing
End Sub

Procedimiento para eliminar el registro
Sub DeleteRecord(registros As ADODB.Recordset, FieldName As String, FieldValue As Variant)
If registros.EOF Then
Exit Sub
Else
With registros
'recorremos el conjunto de registros buscando el valor soliciado
Do Until .EOF
If .Fields(FieldName) = FieldValue Then
Exit Sub
Else
.Delete
Exit Do
End If
.MoveNext
Loop
End With
End If
End Sub

Procedimiento para los 6 segundos
Sub DoLoopForSeconds(n As Integer)
Dim inicio As Date
'configurar el valor que se utiliza en el bucle do
inicio = Now()
Debug.Print "Hora antes de entrar en ele bucle " & inicio
'recorru bucle hasta n segundos
Do
If DateDiff("s", inicio, Now()) >= n Then
Exit Do
End If
Loop
'imprime la hora final y reproduce sonido
Debug.Print "Hora despues de salir del bucle: " & Now()
Beep
End Sub

Edición de una Fila
Este tercer ejemplo de esta sección demuestra como modificar el valor de una fila de una conjuntó de registros. Igualmente este ejemplo llamara a los procedimientos creados anterior mente de esta manera agilizamos el código para no volver a escribirlo.

Sub CallUpdateField()
'declaramos las variables
Dim registros As ADODB.Recordset
Dim entero As Integer
'configuramos el cursor para que no sea de solo lectura
Set registros = New ADODB.Recordset
With registros
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\Northwind.mdb"
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "Shippers", , , , adCmdTable
End With
'añadimos la fila y esperamos 6 segundos para que se modifique la tabla
entero = AddShippers()
DoLoopForSeconds 6
'llamamos ala rutina de modificar pasado los datos
UpdateField registros, "CompanyName", "Access 2003 Curso ADO", "Access 2003 ADO"
'borramos la fila para insertar la fila modificada
DeleteRecord registros, "CompanyName", "Access 2003 ADO"
'liberamos los objetos
registros.Close
Set registros = Nothing
End Sub

Sub UpdateField(registros As ADODB.Recordset, FieldName As String, OldFieldValue As Variant, NewFieldValue As Variant)
'indicamos registros en with
With registros
'buscamos el campo seleccionado
Do Until .EOF
If .Fields(FieldName) = OldFieldValue Then
.Fields(FieldName) = NewFieldValue
.Update
Exit Do
.MoveNext
Loop
End With
End Sub

No hay comentarios:

Publicar un comentario