Saltar al contenido

Contar Registros de una tabla Access desde formulario Excel vba

publicado

Buenas tardes, tengo una procedimiento que estoy modificando para contar los registros de una tabla access y verlos en un textbox de un formulario excel vba, pero el resultado siempre me sale -1 y en la tabla hay 4 registros.

Sub Consulta_Registros()
    Dim conexion As ADODB.Connection
    Dim recordset As ADODB.recordset
    Dim Consulta As String
    Dim MiBase As String
    
    Set conexion = New ADODB.Connection
    
    MiBase = "\DBClientes.accdb"
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & Application.ThisWorkbook.Path & Application.PathSeparator & MiBase
    
        Consulta = "SELECT * FROM TClientes "
        Consulta = "SELECT COUNT(Razon_Social) FROM TClientes "
    
     Set recordset = New ADODB.recordset
    recordset.Open Consulta, conexion
    
    Dim total_reg As Integer
    recordset.MoveNext
    UserForm1.TextBox1.Value = recordset.RecordCount

    
    total_reg = 0
      Set recordset = Nothing
      Set conexion = Nothing
End Sub
 

Espero me puedan apoyar, gracias.

ContarRegistros.rar

Featured Replies

publicado

no descargué tu adjunto, pero para corregir el error de -1 en ".RecordCount", ANTES de esta línea:

Hace 2 horas, mangelperu dijo:

conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & .......

antecede con la siguiente:

conexion.CursorLocation = adUseClient

saludos,
hector.

publicado
  • Autor
Hace 1 hora, Héctor Miguel dijo:

conexion.CursorLocation = adUseClient

Hola Hector, gracias por responder, realice lo que me indicaste, y el resultado es que del valor -1 lo vuelve positivo a 1, pero en la tabla tengo 4 registros, por lo que no esta contando todos los registros. haber si me pueden ayudar

 

Captura.JPG

DBClientes.rar

publicado
Hace 1 hora, mangelperu dijo:

lo que me indicaste... del valor -1 lo vuelve positivo a 1, pero en la tabla tengo 4 registros, por lo que no esta contando todos los registros

si no te funciona del lado de la conexión (que "debería"), cámbialo al lado del recordset:

recordset.CursorLocation = adUseClient
recordset.Open Consulta, conexion

otras alternativas al abrir el recordset (OJO: usa solo una de las alternativas) :

recordset.Open consulta, conexion, adOpenKeyset
recordset.Open consulta, conexion, adOpenKeyset And recordset.CursorLocation = adUseClient
recordset.Open consulta, conexion, adOpenStatic And recordset.CursorLocation = adUseClient
recordset.Open consulta, conexion, adOpenStatic

saludos,
hector.

publicado

Hola, el problema es que estas sobreescribiendo el  recordset en esta linea  recordset.MoveNext y despues no estas contando nada en esta linea UserForm1.TextBox1.Value = recordset.RecordCount ya que la forma en que realizas la consulta no devuelve "filas" para contar si no un valor.

Prueba asi:

Sub Consulta_Registros()
    Dim conexion As ADODB.Connection
    Dim recordset As ADODB.recordset
    Dim Consulta As String
    Dim MiBase As String
    
    Set conexion = New ADODB.Connection
    
    MiBase = "\DBClientes.accdb"
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & Application.ThisWorkbook.Path & Application.PathSeparator & MiBase
    
        Consulta = "SELECT * FROM TClientes "
        Consulta = "SELECT COUNT(Razon_Social) FROM TClientes "
    
     Set recordset = New ADODB.recordset
    recordset.Open Consulta, conexion
    
    Dim total_reg As Integer
    
    UserForm1.TextBox1.Value = recordset.GetString

    total_reg = 0
      Set recordset = Nothing
      Set conexion = Nothing
End Sub

Saludos.

publicado
  • Autor

Gracias Alexhanders, me funciono tu aporte, igualmente gracias por tu apoyo Hector Miguel.

publicado
Sub Consulta_Registros()
    Dim conexion As ADODB.Connection
    Dim recordset As ADODB.recordset
    Dim Consulta As String
    Dim MiBase As String
    
    Set conexion = New ADODB.Connection
    
    MiBase = "\DBClientes.accdb"
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & Application.ThisWorkbook.Path & Application.PathSeparator & MiBase
    
        Consulta = "SELECT * FROM TClientes "
        
    
     Set recordset = New ADODB.recordset
    recordset.Open Consulta, conexion, adOpenKeySet, adLockOptimistic, adCmdTableDirect
    
    Dim total_reg As Integer
    
    UserForm1.TextBox1.Value = recordset.RecordCount

    
    total_reg = 0
      Set recordset = Nothing
      Set conexion = Nothing
End Sub

Hola a todos, 

mangelperu, así también puede funciona.

Saludos,

 

César

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.