none
Consultar o tamanho de uma banco de dados access com conexão recordset vba RRS feed

  • Discussão Geral

  • Tenho um formulário em excel vba que faz conexão com um banco de dados no access. Abaixo consta a forma de conexão.

                      

    Public MiConexao As New ADODB.Connection
    Public rs As New ADODB.Recordset
    Public cAtual As Long
    Public cTotal As Long
    Public SQL As String
    
    Sub Conecta()
    
        Set MiConexao = New ADODB.Connection
    
            With MiConexao
    
                .Provider = "Microsoft.ACE.OLEDB.12.0"
                .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\Banco_de_dados_SECAC_2.mdb"
                .Open
    
            End With
    
    End Sub
    
    Sub Abrir_banco_de_dados()
    
        Set rs = New ADODB.Recordset
        rs.Open "select * from banco_de_dados", MiConexao, adOpenKeyset, adLockOptimistic, adCmdText
    
    End Sub

    Em toda macro que preciso consultar meu banco de dados uso o seguinte set: 

     
    Call Conecta2
    
        'Cria varável que armazena os camandos SQL
        Dim ComandoSQL As String
    
        'Armazena na variável o comando que fará a consulta SQL no BD Access
        ComandoSQL = "select * from banco_de_dados"
    
        'Atribui a variável objeto de BD a execução de comandos SQL    )
        Set consulta = banco.OpenRecordset(ComandoSQL)

    A partir daí insiro, altero e até excluo registros da minha tabela no access. Minha atual dúvida reside em como descobrir quantos registros já tenho na minha tabela. Gostaria de um auxílio. Qual propriedade ou método me retornaria essa informação?

    Fiz um contador com o método EOF, todavia, nesse procedimento, descrito abaixo, eu não só conto quantos registros tem o banco, mas também é deslocada a consulta. Com isso, por exemplo, quando inicio o mesmo procedimento para popular uma Listbox ou Listview com os dados dessa tabela não são inseridos nenhum registro. Isso porque a consulta já começa no último registro do banco de dados. É possível constatar o que estou dizendo apenas realizando o código consulta.recordcount depois de efetuar a macro abaixo. Necessito de ajuda. 

       
     While Not consulta.EOF
        num = num + 1
        consulta.MoveNext
        Wend
    
        MsgBox "" & num   

     

    Já dei uma olhada em todos os métodos e propriedades da recordset no sitio (https://msdn.microsoft.com/pt-br/library/office/ff834683.aspx) e não encontrei aquele que me retorna a quantidade de registros no banco access.

    Agradeço a ajuda.


    quarta-feira, 3 de outubro de 2018 21:46

Todas as Respostas

  • Andrew, bom dia.

    Usando a instrução abaixo não resolve o seu problema?

    SELECT Count(Campo) AS Total
    FROM banco_de_dados;

    quinta-feira, 4 de outubro de 2018 14:12
  • Poderia detalhar melhor.

    Agradecido.

    quinta-feira, 4 de outubro de 2018 15:18
  • No seu código, você executa uma consulta para selecionar todos os registros do banco

     'Armazena na variável o comando que fará a consulta SQL no BD Access'
        ComandoSQL = "select * from banco_de_dados"
    
        'Atribui a variável objeto de BD a execução de comandos SQL    )'
        Set consulta = banco.OpenRecordset(ComandoSQL)

    Acho (Sem conhecer a estrutura toda do seu código) que se na linha onde você usa While, você poderia sobrescrever a variável ComandoSQL e executar a consulta que conta:

    'Armazena na variável o comando que fará a consulta SQL no BD Access'
    
    ComandoSQL ='select Count(Campo) from banco_de_dados'
    
    'Atribui a variável objeto de BD a execução de comandos SQL    )'
        Set consulta = banco.OpenRecordset(ComandoSQL)



    quinta-feira, 4 de outubro de 2018 16:17
  • Tentei o que sugeriu mas não deu resultado.

    Teria outra sugestão?

    quinta-feira, 4 de outubro de 2018 17:24