Database.OpenRecordset, méthode (DAO)

S’applique à : Access 2013 | Office 2013

Crée un objet Recordset et l’ajoute à la collection Recordsets.

Syntaxe

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

expression Variable qui représente un objet Database.

Paramètres

Nom

Obligatoire/facultatif

Type de données

Description

Name

Obligatoire

Chaîne

Source des enregistrements du nouveau Recordset. La source peut être un nom de table, un nom de requête ou une instruction SQL qui renvoie des enregistrements. Pour les objets Recordset de type table dans les bases de données du moteur de base de données Microsoft Access, la source peut uniquement être un nom de table.

Type

Facultatif

Variant

Constante RecordsetTypeEnum qui indique le type de Recordset à ouvrir.

REMARQUE : si vous ouvrez un objet Recordset dans un espace de travail Microsoft Access et que vous n’indiquez aucun type, OpenRecordset crée un objet Recordset de type table, si possible. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

Options

Facultatif

Variant

Combinaison de constantes RecordsetOptionEnum qui indiquent les caractéristiques du nouveau Recordset.

REMARQUE : dbConsistent et dbInconsistent s’excluent mutuellement, et l’utilisation de ces deux constantes peut entraîner une erreur. Fournir un argument LockEdit lorsque Options utilise la constante dbReadOnly génère également une erreur.

LockEdit

Facultatif

Variant

Constante LockTypeEnum qui détermine le verrouillage du Recordset.

REMARQUE : vous pouvez utiliser dbReadOnly dans l’argument Options ou l’argument LockedEdit, mais pas dans les deux. Si vous l’utilisez dans les deux arguments, une erreur d’exécution se produit.

Valeur renvoyée

Recordset

Remarques

En général, si l'utilisateur obtient cette erreur lors de la mise à jour d'un enregistrement, le code peut actualiser le contenu des champs et extraire les valeurs qui viennent d'être modifiées. Si l'erreur se produit lors de la suppression d'un enregistrement, le code peut afficher les nouvelles données de l'enregistrement pour l'utilisateur et un message indique que les données ont été modifiées dernièrement. À ce niveau, le code peut demander une confirmation que l'utilisateur souhaite encore supprimer l'enregistrement.

Vous pouvez également utiliser la constante dbSeeChanges si vous ouvrez un Recordset dans un espace de travail ODBC connecté au moteur de base de données Microsoft Access par rapport à une table Microsoft SQL Server 6.0 (ou version ultérieure) qui comporte une colonne IDENTITY, sinon une erreur peut survenir.

L'ouverture de plusieurs objets Recordset dans une source de données ODBC peut entraîner un échec car la connexion est occupée par un appel d'objet OpenRecordset préalable. Pour contourner ce problème, vous pouvez renseigner totalement l'objet Recordset à l'aide de la méthode MoveLast dès que l'objet Recordset est ouvert.

La fermeture d’un Recordset avec la méthode Close le supprime automatiquement de la collection Recordsets.

Remarque

Si source fait référence à une instruction SQL composée d’une chaîne concaténée avec une valeur non entière, et que les paramètres système spécifient une valeur non américaine. Caractère décimal tel qu’une virgule (par exemple, strSQL = « PRICE >  » & lngPrice et lngPrice = 125,50), une erreur se produit lorsque vous essayez d’ouvrir l’objet Recordset. Cela s'explique par le fait que lors de la concaténation, le nombre est converti en chaîne à l'aide du caractère décimal par défaut du système et le langage SQL n'accepte que les caractères décimaux de la notation américaine.

Lien fourni par la communauté UtterAccess. UtterAccess est un forum d’aide et wiki de Microsoft Access réputé.

Exemple

L’exemple suivant montre comment ouvrir un objet Recordset basé sur une requête avec paramètres.

Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.

    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()

L’exemple suivant montre comment ouvrir un Recordset basé sur un tableau ou une requête.

    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)

L’exemple suivant montre comment ouvrir un Recordset basé sur une instruction SQL (Structured Query Language).

    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)

L’exemple suivant montre comment utiliser la propriété Filter pour déterminer les enregistrements à inclure dans un Recordset ouvert par la suite.

    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