Como descobrir o Próximo Código de um Campo PK

Como descobrir o Próximo Código de um Campo PK

Caro leito! Neste artigo vamos mostrar uma rotina VBA que permite identificar o próximo código que o Access vai inserir em um campo de tipo de dado Numeração Automática. Mesmo que você exclua registros e vc sabe que o Access faz algumas atualizações com isso, você será capaz de, através deste procedimento, identificar o próximo código. Portanto, não deixe de ler na íntegra: Como descobrir o Próximo Código de um Campo PK.

Primeiramente devemos criar uma tabela qualquer e inserir um campo com um título ID e o tipo de dado “Numeração Automática”, conforme abaixo:

Agora vou criar um formulário, somente para associar a um botão a mensagem que irá exibir o código do próximo numero da auto numeração. Chamei o botão de cmdVer.

Após isso, vamos criar um código no evento AoClicar deste botão:


Private Sub cmdVer_Click()

    Dim proximoID As Long
    proximoID = getProximoID("Table 1")
    If (proximoID > 0) Then
       MsgBox "Próximo ID para a tabela será " & proximoID, vbInformation, "Aviso"
    Else
       MsgBox "Não há chave primária na Tabela", vbInformation, "Aviso"
    End If

End Sub  

Agora vamos criar a função que realmente resgata o próximo código do campo auto numeração. Função está que chamamos de getProximoID. Lembrando que esta função deverá ser criada em nível do módulo do formulário uque criamos anteriormente.



Private Function getProximoID(NomeTabela As String) As Long
    
   Dim retVal As Long
   Dim cat As Object
   Dim col As Object
   Dim primaryColName As String

   retval = 0
   primaryColName = getChavePrimaria(NomeTabela)

   If (primaryColName <> "") Then
       Set cat = CreateObject("ADOX.Catalog")
       cat.ActiveConnection = CurrentProject.Connection
       Set col = cat.Tables(NomeTabela).Columns(primaryColName)
       retval = col.Properties("Seed") 
   End If

   getProximoID = retval

   Set col = Nothing
   Set cat = Nothing 
    
End Function

O próximo e último passe é criarmos uma função que verifique se a chave primária existe dentro da tabela. Se existir ela vai retornar o nome do campo e se não existir nada será feito. O nome da função será getChavePrimaria



Private Function getChavePrimaria (Table1 As String) As String

    Dim idx As DAO.Index
    Dim retval As String
    Dim db As DAO.Database

    retval = ""

    On Error GoTo ErroSair

    Set db = CurrentDB()
    For Each edx In db.TableDefs(Table1).Indexes
        If idx.Primary Then
           retval = idx.Fields(0).Nome
           Exit For
        End If
    Next

ErroSair:
    Set db = Nothing
    Set idx = Nothing

    getChavePrimaria = retval
 
End Function

Para testar, basta acrescentar alguns valores aleatórios e chamar o formulário. Ao clicar no botão será emitido a seguinte mensagem:

Viu como é simples?

Um forte abraço!

Aldir Oliveira

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *