Jet OLE DB 4.0 版提供者支援 SELECT @ @ 識別查詢可讓您擷取產生您的連線的自動遞增欄位的值。自動遞增的其他連線到您的資料庫使用的值並不會影響此特殊的查詢的結果。這項功能的運作方式,是使用 Jet 4.0 資料庫但不是與較舊的格式。
下列程式碼會示範使用 SELECT @ @ 識別,以擷取新插入的自動遞增欄位的值。程式碼片段也包含了一段琵式碼,用來建立查詢的資料表。
Dim cnDatabase As ADODB.Connection
Dim 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
感謝到此新加入的功能,您可以在用戶端 ActiveX 資料物件 (ADO) 資料錄集,在 ADO 2.1 和更新版本中檢視新加入的自動遞增數值。當您呼叫 Update 或 UpdateBatch (視您所選擇的 LockType) 來提交新的資料列到 Jet 提供者時,ADO 資料指標引擎會產生 INSERT INTO 查詢,以在資料表中建立新的資料列。如果資料錄集包含一個自動遞增欄位,ADO 也會產生一個 SELECT @ @ 識別查詢來擷取產生欄位的自動遞增的值。下列程式碼會示範這項功能:
Dim cnDatabase As ADODB.Connection
Dim 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
您可以建立新的 Jet 4.0 資料庫使用 Microsoft Access 2000 或使用隨附於 MDAC 2.1 ADOX 文件庫。若要將這個媒體櫃 Visual Basic 專案中的建立
Microsoft ADO 滅火器 2.1 DDL 和安全性 的參考。就可以使用類似下列的程式碼建立新的 Jet 4.0 資料庫:
Dim strPathToMDB As String
Dim 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
判定您的 Microsoft Access 資料庫格式,請檢查連線物件的屬性集合中的 [動態 Jet OLEDB:Engine 類型] 屬性。此屬性將傳回 Jet 4.x 資料庫的 5 的值。下列程式碼片段會示範如何使用屬性:
Dim cnDatabase As ADODB.Connection
Dim 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
Microsoft 資料存取 SDK ; 上的搜尋: [Provider-Defined 內容] ; 主題: DBPROPSET_JETOLEDB_DBINIT"