Saltar al contenido

Contar Registros de una tabla Access desde formulario Excel vba


Recommended Posts

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

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
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
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.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.