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