O provedor de versão 4.0 do Jet OLE DB oferece suporte a consulta SELECT @@ Identity que lhe permite recuperar o valor do campo de incremento automático gerado em sua conexão. Valores de incremento automático usados em outras conexões ao seu banco de dados não afetam os resultados dessa consulta especializada. Este recurso funciona com bancos de dados do Jet 4.0, mas não com formatos antigos.
O código a seguir demonstra o uso de SELECT @@ Identity para recuperar o valor do campo de incremento automático recém-inserido. O trecho 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
agradecimentos a essa funcionalidade recém-adicionada, você pode ver os valores de incremento automático recém-adicionado na suas conjuntos de registros de cliente ActiveX Data Objects (ADO) no ADO 2.1 ou posterior. Quando você envia a nova linha para o provedor Jet chamando Update ou UpdateBatch (dependendo de sua escolha de LockType), o mecanismo de cursor ADO gera uma consulta INSERT INTO para criar a nova linha na tabela. Se o conjunto de registros contiver um campo de incremento automático, o ADO também irá gerar uma consulta SELECT @@ Identity para recuperar o valor gerado para esse campo de incremento automático. O código a seguir demonstra esse recurso:
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
você pode criar um banco de dados Jet 4.0 novo usando o Microsoft Access 2000 ou usando a biblioteca ADOX que está incluída no MDAC 2.1. Para usar esta biblioteca no seu projeto Visual Basic, crie uma referência ao
ADO Ext. 2.1 for DDL and Security . Em seguida, você pode usar código semelhante ao seguinte para criar um novo banco 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 do seu banco de dados, verifique a propriedade "Jet OLEDB:Engine tipo" dinâmica na coleção de propriedades do objeto Connection. A propriedade retornará um valor de 5 para bancos de dados do Jet 4.x. O trecho de código a seguir demonstra usando a 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; procure em: "Provider-Defined propriedades"; tópico: "DBPROPSET_JETOLEDB_DBINIT"