Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

ADO: obtendo o valor do campo auto-numeração após INSERT no JET4

A partir do JET4, você pode obter o valor do campo auto-numeração gerado pela última inclusão de registro num banco de dados Access de forma mais prática. Para isto, crie um recordset baseado na consulta "SELECT @@IDENTITY". Ao retornar, o campo 0 do Recordset conterá o valor do último campo auto-numeração gerado para a transação corrente. Veja abaixo uma função que exemplifica como fazer isto:

Public Function ExecuteID(SQL As String) As Long
    'Propósito: retornar o valor da coluna identidade
    'do registro recém incluído
    'O argumento SQL é um comando INSERT válido
    'A propriedade ConnetionString deve ser
    'configurada para um conexão válida


    On Error GoTo LocalError
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim AutoID As Long

    Set rs = CreateObject("ADODB.Recordset")
    With rs
        'Prepara o RecordSet
        .CursorLocation = adUseServer
        .CursorType = adOpenForwardOnly
        .LockType = adLockReadOnly
        .Source = "SELECT @@IDENTITY"
    End With

    Set cn = CreateObject("ADODB.Connection")
    With cn
        .ConnectionString = ConnectionString
        .CursorLocation = adUseServer
        .Open
        .BeginTrans
        .Execute SQL, , adCmdText + adExecuteNoRecords
        Set rs.ActiveConnection = cn
        rs.Open , , , , adCmdText
        AutoID = rs(0).Value
        rs.Close
        .CommitTrans
        .Close
    End With
    Set rs = Nothing
    Set cn = Nothing
    'se você chegou aqui, está tudo ok
    ExecuteID = AutoID
    Exit Function
LocalError:
    MsgBox Err.Number & " - " & Err.Description
    ExecuteID = 0

End Function