Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Después de haber localizado uno o varios registros concretos, puede necesitar extraer datos para utilizarlos en la aplicación en lugar de modificar la tabla de origen subyacente.
Copia de un único campo
Puede copiar un único campo de un registro en una variable de tipo de datos adecuado. En el ejemplo siguiente se extraen tres campos del primer registro de un objeto Recordset .
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
Dim strFirstName As String
Dim strLastName As String
Dim strTitle As String
Set dbsNorthwind = CurrentDb
Set rstEmployees = dbsNorthwind.OpenRecordset("Employees")
rstEmployees.MoveFirst
strFirstName = rstEmployees!FirstName
strLastName = rstEmployees!LastName
strTitle = rstEmployees!Title
Copia de registros completos en una matriz
Para copiar uno o varios registros, puede crear una matriz bidimensional y copiarlos de uno en uno. Debe incrementarse el primer subíndice de cada campo y el segundo de cada registro.
Una manera rápida de hacerlo es usar el método GetRows , que devuelve una matriz bidimensional. El primer subíndice identifica el campo y el segundo identifica el número de fila, como se indica a continuación.
varRecords(intField, intRecord)
En el siguiente ejemplo de código se usa una instrucción SQL para recuperar tres campos de una tabla denominada Empleados de un objeto Recordset. A continuación, usa el método GetRows para recuperar los tres primeros registros de Recordset y almacena los registros seleccionados en una matriz bidimensional. Luego, imprime cada registro, un campo cada la vez, con los dos índices de matriz para seleccionar campos y registros específicos.
Para mostrar cómo se usan los índices de matriz, el ejemplo siguiente usa una instrucción independiente para identificar e imprimir cada campo de cada registro. En la práctica, sería más confiable usar dos bucles, uno anidado en el otro y proporcionar variables de entero para los índices que recorren ambas dimensiones de la matriz.
Sub GetRowsTest()
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
Dim varRecords As Variant
Dim intNumReturned As Integer
Dim intNumColumns As Integer
Dim intColumn As Integer
Dim intRow As Integer
Dim strSQL As String
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
strSQL = "SELECT FirstName, LastName, Title FROM Employees"
Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot)
varRecords = rstEmployees.GetRows(3)
intNumReturned = UBound(varRecords, 2) + 1
intNumColumns = UBound(varRecords, 1) + 1
For intRow = 0 To intNumReturned - 1
For intColumn = 0 To intNumColumns - 1
Debug.Print varRecords(intColumn, intRow)
Next intColumn
Next intRow
rstEmployees.Close
dbsNorthwind.Close
Set rstEmployees = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Use llamadas posteriores al método GetRows si hay más registros disponibles. Dado que la matriz se rellena en cuanto se llama al método GetRows, puede ver la razón por la cual este método es mucho más rápido que copiar los campos de uno en uno.
Observe también que no tiene que declarar Variant como una matriz, ya que esto se hace automáticamente cuando el método GetRows devuelve registros. Esto permite utilizar dimensiones de matriz de longitud fija sin necesidad de saber cuántos registros o campos se devolverán, en lugar de utilizar dimensiones de longitud variable que ocupan más de memoria.
Si intenta recuperar todas las filas mediante varias llamadas GetRows , use la propiedad EOF para asegurarse de que está al final del objeto Recordset. El método GetRows puede devolver menos filas de las solicitadas. Por ejemplo, si solicita un mayor número de filas que las que quedan en un objeto Recordset, el método GetRows solo devuelve las filas que quedan. Del mismo modo, si no se puede recuperar una fila del intervalo solicitado, esta no se devuelve.
Por ejemplo, si intenta recuperar un grupo de 10 registros y no se puede recuperar el quinto registro, el método GetRows devuelve cuatro, deja la posición de registro actual en el registro que causó el problema y no genera ningún error en tiempo de ejecución. Esta situación se puede dar cuando se trata de un registro de un objeto Dynaset eliminado anteriormente por otro usuario. Si se devuelve un número de registros menor que el solicitado y no se está al final del archivo, necesitará leer cada uno de los campos del registro actual para determinar qué tipo de error encontró el método GetRows.
Dado que el método GetRows siempre devuelve todos los campos del objeto Recordset, es posible que necesite crear una consulta que devuelva sólo los campos que necesita. Esto es especialmente importante en el caso de los campos de tipo Memo y tipo Objeto OLE.
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.