Método Database.OpenRecordset (DAO)

Se aplica a: Access 2013 | Office 2013

Crea un nuevo objeto Recordset y lo anexa a la colección Recordsets.

Sintaxis

expression.OpenRecordset(Name, Type, Options, LockEdit)

expression Variable que representa un objeto Database.

Parameters

Nombre

Obligatorio/opcional

Tipo de datos

Descripción

Name

Obligatorio

String

Origen de los registros para el nuevo Recordset. El origen puede ser un nombre de tabla o de consulta, o una instrucción SQL que devuelve registros. Para los objetos Recordset de tipo tabla en las bases de datos del motor de base de datos de Microsoft Access, el origen solo puede ser un nombre de tabla.

Type

Opcional

Variant

Una constante RecordsetTypeEnum que indica el tipo de Recordset para abrir.

NOTA: si abre un Recordset en un área de trabajo de Microsoft Access y no especifica un tipo, OpenRecordset crea un Recordset de tipo tabla, si es posible. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

Opciones

Opcional

Variant

Una combinación de constantes RecordsetOptionEnum que especifican características del nuevo Recordset.

NOTA: las constantes dbConsistent y dbInconsistent son mutuamente exclusivas, y usar las dos producirá un error. Si proporciona un argumento LockEdit cuando Options usa la constante dbReadOnly también provoca un error.

LockEdit

Opcional

Variant

Una constante LockTypeEnum que determina el bloqueo del Recordset.

NOTA: puede usar dbReadOnly en el argumento Options o en el argumento LockedEdit, pero no en ambos. Si lo usa para ambos argumentos, se produce un error en tiempo de ejecución.

Valor devuelto

Recordset

Comentarios

En general, si el usuario obtiene este error mientras actualiza un registro, el código debe actualizar el contenido de los campos y recuperar los valores recién modificados. Si el error se produce al eliminar un registro, el código puede mostrar los nuevos datos de registros al usuario y un mensaje en el que se indica que los datos han cambiado recientemente. En ese momento, el código puede pedir una confirmación de que aún se desea eliminar el registro.

Debe usar también la constante dbSeeChanges si abre un objeto Recordset en el área de trabajo de ODBC conectado por el motor de base de datos de Microsoft Access contra una tabla de Microsoft SQL Server 6.0 (o posterior) que tiene una columna IDENTITY o, de lo contrario, puede producirse un error.

Al abrir más de un objeto Recordset en un origen de datos ODBC, se puede producir un error si la conexión está ocupada con una llamada OpenRecordset anterior. Un modo de solucionar este problema es rellenar completamente el objeto Recordset mediante el método MoveLast en cuanto se abra el objeto Recordset.

Cerrar un objeto Recordset con el método Close lo elimina automáticamente de la colección Recordsets.

Nota:

Si source hace referencia a una instrucción SQL formada por una cadena concatenada con un valor no entero y los parámetros del sistema especifican un valor que no es de EE. UU. Carácter decimal como una coma (por ejemplo, strSQL = "PRICE > " & lngPrice y lngPrice = 125,50), se produce un error al intentar abrir el objeto Recordset. Esto se debe a que, durante la concatenación, el número se convierte en una cadena con el carácter decimal predeterminado del sistema, y SQL solo acepta los caracteres decimales de Estados Unidos.

Vínculo proporcionado por la comunidad de UtterAccess. UtterAccess es el principal foro de ayuda y wiki de Microsoft Access.

Ejemplo

En el siguiente ejemplo, se muestra cómo abrir un Recordset basado en una consulta de parámetros.

Código de ejemplo proporcionado por la Referencia del programador de Microsoft Access 2010.

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Get the parameter query
    Set qdf = dbs.QueryDefs("qryMyParameterQuery")
    
    'Supply the parameter value
    qdf.Parameters("EnterStartDate") = Date
    qdf.Parameters("EnterEndDate") = Date + 7
    
    'Open a Recordset based on the parameter query
    Set rst = qdf.OpenRecordset()

En el siguiente ejemplo, se muestra cómo abrir un Recordset a partir de una tabla o una consulta.

    Dim dbs As DAO.Database
    Dim rsTable As DAO.Recordset
    Dim rsQuery As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Open a table-type Recordset
    Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
    
    'Open a dynaset-type Recordset using a saved query
    Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)

En el siguiente ejemplo, se muestra cómo abrir un Recordset a partir de una instrucción del Lenguaje de consulta estructurado (SQL).

    Dim dbs As DAO.Database
    Dim rsSQL As DAO.Recordset
    Dim strSQL As String
    
    Set dbs = CurrentDb
    
    'Open a snapshot-type Recordset based on an SQL statement
    strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
    Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

En el siguiente ejemplo se muestra cómo usar la propiedad Filter para determinar los registros que se incluirán en un Recordset que se abrirá posteriormente.

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim rstFiltered As DAO.Recordset
    Dim strCity As String
    
    Set dbs = CurrentDb
    
    'Create the first filtered Recordset, returning customer records
    'for those visited between 30-60 days ago.
    Set rst = dbs.OpenRecordset(_ 
        "SELECT * FROM Customers WHERE LastVisitDate BETWEEN Date()-60 " & _
        "AND Date()-30 ORDER BY LastVisitDate DESC")
    
    'Begin row processing
    Do While Not rst.EOF
        
        'Retrieve the name of the first city in the selected rows
        strCity = rst!City
    
        'Now filter the Recordset to return only the customers from that city
        rst.Filter = "City = '" & strCity & "'"
        Set rstFiltered = rst.OpenRecordset
    
        'Process the rows
        Do While Not rstFiltered.EOF
            rstFiltered.Edit
            rstFiltered!ToBeVisited = True
            rstFiltered.Update
            rstFiltered.MoveNext
        Loop
    
        'We've done what was needed. Now exit
        Exit Do
        rst.MoveNext
       
    Loop
    
    'Cleanup
    rstFiltered.Close
    rst.Close
    
    Set rstFiltered = Nothing
    Set rst = Nothing