INFO: Jet OLE DB Provider Version 4.0 unterstützt @@Identity auswählen

Zusammenfassung

Der Version 4.0 Jet OLE DB-Provider unterstützt SELECT @@Identity-Abfrage, die den Wert des Feldes AUTOINCREMENT generiert die Verbindung abrufen kann. Automatisch inkrementierte Werte auf anderen Verbindungen zu Ihrer Datenbank beeinflussen nicht die Ergebnisse dieser speziellen Abfrage. Dieses Feature funktioniert mit Jet 4.0-Datenbanken jedoch nicht mit älteren Formate.

Weitere Informationen

Im folgende Code veranschaulicht, wie mit SELECT @@Identity den Wert des Felds neu eingefügten automatisch inkrementierte abzurufen. Der Codeausschnitt enthält auch Code zum Erstellen der Tabelle für die Abfrage.

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

Durch diese neue Funktionalität sehen Sie die neu hinzugefügte automatisch inkrementierte Werte clientseitige ActiveX Data Objects (ADO) Recordsets in ADO 2.1 und höher. Beim Absenden der Jet-Anbieter der neuen Zeile durch Aufruf von Update oder UpdateBatch (je nach LockType) generiert ADO-Cursor-Modul eine INSERT INTO-Abfrage, um die neue Zeile in der Tabelle zu erstellen. Enthält das Recordset ein AUTOINCREMENT Feld ADO generieren auch eine SELECT @@Identity-Abfrage zum Abrufen des Werts für das Feld automatisch inkrementierte generiert. Der folgende Code veranschaulicht dieses Feature:

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

Erstellen Sie eine neue Jet 4.0-Datenbank Microsoft Access 2000 oder MDAC 2.1 enthaltene ADOX-Bibliothek. Um diese Bibliothek im Visual Basic-Projekt zu verwenden, erstellen Sie einen Verweis auf Microsoft ADO Extensibility 2.1 for DDL and Security. Code wie den folgenden können Sie um eine neue Jet 4.0-Datenbank zu erstellen:

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

Bestimmen Sie das Format des Microsoft Access-Datenbank überprüfen Sie die dynamische "Jet OLEDB:Engine Type"-Eigenschaft in das Verbindungsobjekt Properties-Auflistung. Die Eigenschaft wird der Wert 5 für Jet 4.x-Datenbanken. Der folgende Codeausschnitt veranschaulicht die Verwendung der Eigenschaft:

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

Referenzen

Microsoft Data Access SDK; Suche nach: "Provider-Defined Eigenschaften"; Thema: "DBPROPSET_JETOLEDB_DBINIT"
Eigenschaften

Artikelnummer: 232144 – Letzte Überarbeitung: 10.01.2017 – Revision: 1

Feedback