O fornecedor de versão 4.0 OLE DB Jet suporta a consulta SELECT @@ Identity que lhe permite obter o valor do campo de incremento automático gerado na ligação. Valores de incremento automático utilizados nas outras ligações à base de dados não afectam os resultados desta consulta especializada. Esta funcionalidade funciona com bases de dados Jet 4.0, mas não com formatos mais antigos.
O seguinte código demonstra a utilização a SELECT @@ Identity para obter o valor do campo de incremento automático recém-inserido. O fragmento de código também inclui código para criar a tabela para a consulta.
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
graças para esta funcionalidade recentemente, pode ver os valores de incremento automático recentemente na conjuntos de registos do ActiveX Data Objects (ADO) lado do cliente no ADO 2.1 e versões posterior. Quando submeter a nova linha para o fornecedor de Jet chamando Update ou UpdateBatch (consoante a escolha de LockType), o motor do cursor ADO gera uma consulta INSERT INTO para criar a nova linha na tabela. Se o conjunto de dados contiver um campo de incremento automático, o ADO também irá gerar uma consulta SELECT @@ Identity para obter o valor gerado para esse campo de incremento automático. O seguinte código demonstra esta funcionalidade:
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
pode criar uma nova base de Jet 4.0 dados a utilizar o Microsoft Access 2000 ou utilizar a biblioteca ADOX que está incluída no MDAC 2.1. Para utilizar esta biblioteca no projecto do Visual Basic, crie uma referência à
Microsoft ADO Ext. 2.1 for DDL and Security . Em seguida, pode utilizar código semelhante ao seguinte para criar uma nova base de dados 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
para determinar o formato de base de dados do Microsoft Access, verifique as propriedades "Jet OLEDB:Engine tipo" dinâmica na colecção de propriedades do objeto Connection. A propriedade devolverá um valor de 5 para bases de dados do Jet 4.x. Fragmento de código seguinte demonstra a utilização da propriedade:
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 Data Access SDK; procura de: "Provider-Defined propriedades"; tópico: "DBPROPSET_JETOLEDB_DBINIT"