Comment rechercher un enregistrement à l’aide d’ADO et du fournisseur OLE DB Jet
Article
S’applique à:
Access 2007, Access 2003, Access 2002
Avancé : nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur.
Cet article s’applique à un fichier de base de données Microsoft Access .MDB ou .ACCDB.
Résumé
Cet article explique comment utiliser Ado (ActiveX Data Objects) et OLE DB pour rechercher des enregistrements dans une base de données Microsoft Jet.
Informations supplémentaires
Voici deux exemples de procédures. La première, CreateJetDB, crée une base de données Microsoft Jet dans le répertoire racine du lecteur C et la remplit avec des données. Le deuxième, CursorLocationTimed, montre comment utiliser la méthode Find avec un curseur côté serveur et un curseur côté client.
Pour créer ces procédures, procédez comme suit :
Créez une base de données Microsoft Access.
Créez un module.
Dans le menu Outils, cliquez sur Références, puis vérifiez que les références suivantes sont sélectionnées :
Bibliothèque Microsoft ActiveX Data Objects 2.1 ou version ultérieure
Microsoft ADO Ext. 2.1 pour DDL et sécurité ou version ultérieure
Tapez ou collez les procédures suivantes :
VB
Sub CreateJetDB()
Dim cat As ADOX.Catalog
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim numrecords AsLongDim i AsLongSet cat = New ADOX.Catalog
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
' Number of sample records to create
numrecords = 250000OnErrorResumeNext'Delete the sample database if it already exists.'Change "findseek.mdb" to "findseek.accdb" for Access 2007.'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 'Access 2007 ACCDB databases.
Kill "c:\findseek.mdb"OnErrorGoTo0' Create a new Jet 4.0 database name findseek.mdb'Change "findseek.mdb" to "findseek.accdb" for Access 2007.'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 'Access 2007 ACCDB databases.
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\findseek.mdb"' Set the provider, open the database,'and create a new table called tblSequential.'Change "findseek.mdb" to "findseek.accdb" for Access 2007.'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 'Access 2007 ACCDB databases.
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=c:\findseek.mdb"
cn.Execute "CREATE TABLE tblSequential (col1 long, col2 text(75));"'Open the new table.
rs.Open "tblSequential", cn, adOpenDynamic, _
adLockOptimistic, adCmdTableDirect
' Add sample records to the tblSequential table.For i = 0To numrecords
rs.AddNew
rs.Fields("col1").Value = i
rs.Fields("col2").Value = "value_" & i
rs.Update
Next i
rs.Close
'Create a multifield Index on col1 and col2.
cn.Execute "CREATE INDEX idxSeqInt on tblSequential (col1, col2);"'Close the connection
cn.Close
EndSubSub CursorLocationTimed()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i, j AsLongDim time As Variant
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
OnErrorGoTo ErrHandler
'Change "findseek.mdb" to "findseek.accdb" for Access 2007.'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 'Access 2007 ACCDB databases.
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=c:\findseek.mdb"' Specify how ADO should open the recordset:' adUseServer - use the native provider to perform cursor' operations' adUseClient - use the client cursor engine in ADO' NOTE: adUseServer more closely resembles DAO' Time opening a recordset and doing 1000 finds (Server cursor' engine)'
rs.CursorLocation = adUseServer
time = Timer
' Open the recordset and perform serveral Finds to locate records.' Using the adCmdTableDirect opens a base table against Jet, which' is generally the fastest, most functional way to access tables.
rs.Open "tblSequential", cn, adOpenDynamic, adLockOptimistic, _
adCmdTableDirect
For i = 0To1000
rs.Find "col1=" & i
Next i
Debug.Print "Sequential Find + Open (Server) = " & Timer - time
rs.Close
' Time opening a recordset and doing 1000 finds (Client cursor' engine)
rs.CursorLocation = adUseClient
time = Timer
rs.Open "tblSequential", cn, adOpenDynamic, _
adLockOptimistic, adCmdTableDirect
For i = 0To1000
rs.Find "col1=" & i
Next i
Debug.Print "Sequential Find + Open (Client) = " & Timer - time
rs.Close
ExitSub
ErrHandler:
For j = 0To cn.Errors.Count - 1
Debug.Print "Conn Err Num : "; cn.Errors(j).Number
Debug.Print "Conn Err Desc: "; cn.Errors(j).Description
Next j
ResumeNextEndSub
Pour créer l’exemple de base de données, tapez la ligne suivante dans la fenêtre Exécution, puis appuyez sur Entrée :
VB
CreateJetDB
Pour illustrer la méthode Find, tapez la ligne suivante dans la fenêtre Exécution, puis appuyez sur Entrée :
VB
CursorLocationTimed
Vous devez voir une sortie similaire à ce qui suit :
La recherche de données est une action fréquente dans une solution métier. La recherche de vos données est cruciale pour l’expérience utilisateur. Comprendre la méthode de recherche fait toute la différence. Ce module explique comment trouver vos données efficacement.
Démontrez que vous avez les compétences nécessaires pour tirer le meilleur parti d’Access 2019 en obtenant la certification d’expert microsoft Office Specialist (MOS).