INFO : La prise en charge du Version 4.0 du fournisseur Jet OLE DB SÉLECTIONNEZ @@Identity

Résumé

Fournisseur Jet OLE DB version 4.0 prend en charge la requête SELECT @@Identity qui vous permet de récupérer la valeur de ce champ d’incrémentation automatique généré par votre connexion. Valeurs auto-incrémentées utilisés sur d’autres connexions à votre base de données n’affectent pas les résultats de cette requête spécialisée. Cette fonctionnalité fonctionne avec les bases de données Jet 4.0, mais pas avec les formats plus anciens.

Plus d'informations

Le code suivant illustre l’utilisation de la @@Identity SELECT pour récupérer la valeur de ce champ à incrémentation automatique qui vient d’être inséré. L’extrait de code inclut également le code pour créer la table de la requête.

Dim cnDatabase As ADODB.ConnectionDim rsNewAutoIncrement As ADODB.Recordset
Dim strConn As String
Dim strSQL As String
Dim strPathToMDB As String

strPathToMDB = "C:\NewJet4.MDB"
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathToMDB & ";"
Set cnDatabase = New ADODB.Connection
cnDatabase.Open strConn

strSQL = "CREATE TABLE AutoIncrementTest " & _
"(ID int identity, Description varchar(40), " & _
"CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"
cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecords

strSQL = "INSERT INTO AutoIncrementTest " & _
"(Description) VALUES ('AutoIncrement Test')"
cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecords

strSQL = "SELECT @@Identity"
Set rsNewAutoIncrement = New ADODB.Recordset
rsNewAutoIncrement.Open strSQL, cnDatabase, adOpenForwardOnly, _
adLockReadOnly, adCmdText
MsgBox "New Auto-increment value is: " & rsNewAutoIncrement(0).Value

rsNewAutoIncrement.Close
Set rsNewAutoIncrement = Nothing
strSQL = "DROP TABLE AutoIncrementTest"
cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecords
cnDatabase.Close
Set cnDatabase = Nothing

Grâce à cette fonctionnalité nouvellement ajoutée, vous pouvez voir les valeurs auto-incrémentées nouvellement ajouté dans vos jeux d’enregistrements des objets ADO (ActiveX Data OBJECTS) côté client dans ADO 2.1 et version ultérieure. Lorsque vous soumettez la nouvelle ligne pour le fournisseur Jet en appelant les méthodes Update ou UpdateBatch (selon votre choix de LockType), le moteur du curseur ADO génère une requête INSERT INTO pour créer une nouvelle ligne dans la table. Si le jeu d’enregistrements contient un champ à incrémentation automatique, ADO génère également une requête SELECT @@Identity pour récupérer la valeur générée pour ce champ d’incrémentation automatique. Le code suivant illustre cette fonctionnalité :

Dim cnDatabase As ADODB.ConnectionDim rsNewAutoIncrement As ADODB.Recordset
Dim strConn As String
Dim strSQL As String
Dim strPathToMDB As String

strPathToMDB = "C:\NewJet4.MDB"
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathToMDB & ";"
Set cnDatabase = New ADODB.Connection
cnDatabase.Open strConn

strSQL = "CREATE TABLE AutoIncrementTest " & _
"(ID int identity, Description varchar(40), " & _
"CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"
cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecords

strSQL = "SELECT ID, Description FROM AutoIncrementTest"
Set rsNewAutoIncrement = New ADODB.Recordset
rsNewAutoIncrement.CursorLocation = adUseClient
rsNewAutoIncrement.Open strSQL, cnDatabase, adOpenStatic, _
adLockOptimistic, adCmdText
rsNewAutoIncrement.AddNew
rsNewAutoIncrement("Description").Value = "AutoIncrement Test"
rsNewAutoIncrement.Update
MsgBox "New Auto-increment value is: " & rsNewAutoIncrement(0).Value

rsNewAutoIncrement.Close
Set rsNewAutoIncrement = Nothing
strSQL = "DROP TABLE AutoIncrementTest"
cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecords
cnDatabase.Close
Set cnDatabase = Nothing

Vous pouvez créer une nouvelle base de données Jet 4.0 à l’aide de Microsoft Access 2000 ou à l’aide de la bibliothèque ADOX qui est fournie avec MDAC 2.1. Pour utiliser cette bibliothèque dans votre projet Visual Basic, créez une référence à Microsoft ADO Ext. 2.1 pour DDL et la sécurité. Vous pouvez ensuite utiliser le code comme suit pour créer une nouvelle base de données Jet 4.0 :

Dim strPathToMDB As StringDim catNewDatabase As ADOX.Catalog

strPathToMDB = "C:\NewJet4.MDB"
If Dir(strPathToMDB) <> "" Then
Kill strPathToMDB
End If
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathToMDB & ";"
Set catNewDatabase = New ADOX.Catalog
catNewDatabase.Create strConn
Set catNewDatabase = Nothing

Pour déterminer le format de votre base de données Microsoft Access, vérifiez la propriété dynamique « Type de OLEDB:Engine Jet » dans la collection Properties de l’objet Connection. La propriété renvoie une valeur de 5 bases de données Jet 4.x. L’extrait de code suivant illustre l’utilisation de la propriété :

Dim cnDatabase As ADODB.ConnectionDim strConn As String
Dim strPathToMDB As String

strPathToMDB = "C:\NewJet4.MDB"
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathToMDB & ";"
Set cnDatabase = New ADODB.Connection
cnDatabase.Open strConn
If cnDatabase.Properties("Jet OLEDB:Engine Type").Value = 5 Then
MsgBox "Jet 4.0 database"
Else
MsgBox "Not a Jet 4.0 database"
End If
cnDatabase.Close
Set cnDatabase = Nothing

Références

Microsoft Data Access SDK ; recherche de : « Propriétés Provider-Defined » ; rubrique : « DBPROPSET_JETOLEDB_DBINIT »
Propriétés

ID d'article : 232144 - Dernière mise à jour : 9 janv. 2017 - Révision : 1

Commentaires