Jump to content
lphant

Contar registros

Recommended Posts

buenas noches;

estoy intentando contar registros de access desde excel con el metodo SQL pero no se como mostrar el resultado.

por favor, me podeis ayudar??.

Estas son las lineas que tengo.

Sub Contar_Datos()

    Dim cn As Object
    Dim datos As Object
    Dim consultaSql  As String
    Dim conexion As String

    Set cn = CreateObject("ADODB.Connection")
    conexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Users\Desktop\Base.accdb"
 
    consultaSql = "Select count (Motivo) from Consulta where Motivo ='CIERRE ROTO'"
  
    cn.Open conexion

    Set datos = cn.Execute(consultaSql)



    datos.Close
    Set datos = Nothing
    cn.Close
    Set cn = Nothing
          
End Sub

Prueba_Contar.xlsm

Share this post


Link to post
Share on other sites

Hola

Usar Execute tiene alguno dilemas como el que no puede establecerse algunas propiedad al RecorSet como por ejemplo RecodCount. Igual, como estás usando Count en la sentencia SQL, podemos usar un "truco":

Sub Contar_Datos()

    Dim cn As Object
    Dim datos As Object
    Dim consultaSql  As String
    Dim conexion As String
    Dim nRST As Long

    Set cn = CreateObject("ADODB.Connection")
    conexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Users\Desktop\Base.accdb"
 
    consultaSql = "Select count (Motivo) from Consulta where Motivo ='CIERRE ROTO'"
  
    cn.Open conexion

    Set datos = cn.Execute(consultaSql)
    nRST = datos(0)
    MsgBox nRST

    datos.Close
    Set datos = Nothing
    cn.Close
    Set cn = Nothing
          
End Sub

Comentas

Abraham Valencia

Share this post


Link to post
Share on other sites

Buenas tardes @avalencia;

 

Muchísimas gracias, ayer me tire toda la tarde buscando por internet y haciendo pruebas y no conseguí nada ( estoy muy perdido con SQL ).

 

Tengo otras 2 dudas, no sé si me podrás ayudar.

 

Si tengo que contar con 2 o más condiciones, tengo que hacer las consultas de contar por separado o se pueden unir en 1 consulta??.

 

consultaSql = "Select count (Motivo) from Consulta where Motivo ='CIERRE ROTO'"

 

consultaSql = "Select count (Motivo) from Consulta where Motivo ='Tacon"

 

consultaSql = "Select count (Motivo) from Consulta where Motivo ='Piel"

 

Y si una de las condiciones es un rango de fechas.

 

La línea creo que sería esta.

 

consultaSql = "Select count (Motivo) from Consulta where Motivo Between #04-03-19# and #10-03-19#

 

Se podría de alguna forma contar por número de semanas en vez de por rango??,  la columna de Access donde tiene la información está en formato fecha no en número de semanas.

 

Muchísimas gracias de antemano.

Share this post


Link to post
Share on other sites

Hola

Creo que las reglas dicen que nuevas consulta se hacen en nuevos post pero, ya que estamos por aquí... 

Lo primero lo haría así:

 

consultaSql = "Select count (Motivo) from Consulta where Motivo In ('CIERRE ROTO','Tacon', 'Piel')"

Sobre lo segundo, tienes errores de concepto, por ejemplo quieres equiparar el campo "Motivo" ¡¡¡a fechas!!! eso es imposible, tendríaque ser así:

consultaSql = "Select count (Motivo) from Consulta where Campofecha Between #03-04-2019# and #03-10-2019#"

Ojo con el formato de las fechas, tiene que ser "mm/dd/yyyy".

Lo del número de semana, pues, no queda claro.

Abraham Valencia

 

Share this post


Link to post
Share on other sites
Hace 34 minutos , avalencia dijo:

Hola

Creo que las reglas dicen que nuevas consulta se hacen en nuevos post pero, ya que estamos por aquí... 

Lo primero lo haría así:

 

consultaSql = "Select count (Motivo) from Consulta where Motivo In ('CIERRE ROTO','Tacon', 'Piel')"

Sobre lo segundo, tienes errores de concepto, por ejemplo quieres equiparar el campo "Motivo" ¡¡¡a fechas!!! eso es imposible, tendríaque ser así:

consultaSql = "Select count (Motivo) from Consulta where Campofecha Between #03-04-2019# and #03-10-2019#"

Ojo con el formato de las fechas, tiene que ser "mm/dd/yyyy".

Lo del número de semana, pues, no queda claro.

Abraham Valencia

 

Tienes razón, debería haber echo otra consulta, gracias por contestarme.

No lo explique bien, quiero que cuente la cantidad de registros de cada condición.

Con la línea que me dices contaría todo en 1 no??.

Tacón = 3

Piel = 2

CIERRE ROTO =  4

ostras, el formato de la fecha es mes, día y año??, Puufff...eso no lo sabía.

Lo del número de semana.......era ya rizar mucho el rizo, jejejeje...

Muchísimas gracias.

Share this post


Link to post
Share on other sites

Hola nuevamente

Como dijiste " tengo que contar con 2 o más condiciones" se entendía que todas juntas, aclarado que no es así, pues debes de usar una sentencia sql por cada conteo pero, ojo, no es necesario abrir y cerrar la conexión, basta tener un bucle y asignar los valores en matriz:

 Sub Contar_Datos()

    Dim cn As Object
    Dim datos As Object
    Dim consultaSql  As String
    Dim conexion As String
    Dim nRST As Long, x As Long
    Dim Valores(1 To 3) As String
    
    Valores(1) = "CIERRE ROTO"
    Valores(2) = "Tacon"
    Valores(3) = "Piel"
    
    Set cn = CreateObject("ADODB.Connection")
    conexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Users\Desktop\Base.accdb"
   
    cn.Open conexion

    For x = LBound(Valores) To UBound(Valores)
        
        consultaSql = "Select count (Motivo) from Consulta where Motivo ='" & Valores(x) & "'"
        Set datos = cn.Execute(consultaSql)
        nRST = datos(0)
        MsgBox Valores(x) & " :" & nRST
        datos.Close
        Set datos = Nothing
    
    Next x
    
    cn.Close
    Set cn = Nothing
          
End Sub

Abraham Valencia

Share this post


Link to post
Share on other sites
En ‎11‎/‎03‎/‎2019 at 18:48 , avalencia dijo:

Hola nuevamente

Como dijiste " tengo que contar con 2 o más condiciones" se entendía que todas juntas, aclarado que no es así, pues debes de usar una sentencia sql por cada conteo pero, ojo, no es necesario abrir y cerrar la conexión, basta tener un bucle y asignar los valores en matriz:

 Sub Contar_Datos()

    Dim cn As Object
    Dim datos As Object
    Dim consultaSql  As String
    Dim conexion As String
    Dim nRST As Long, x As Long
    Dim Valores(1 To 3) As String
    
    Valores(1) = "CIERRE ROTO"
    Valores(2) = "Tacon"
    Valores(3) = "Piel"
    
    Set cn = CreateObject("ADODB.Connection")
    conexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Users\Desktop\Base.accdb"
   
    cn.Open conexion

    For x = LBound(Valores) To UBound(Valores)
        
        consultaSql = "Select count (Motivo) from Consulta where Motivo ='" & Valores(x) & "'"
        Set datos = cn.Execute(consultaSql)
        nRST = datos(0)
        MsgBox Valores(x) & " :" & nRST
        datos.Close
        Set datos = Nothing
    
    Next x
    
    cn.Close
    Set cn = Nothing
          
End Sub

Abraham Valencia

Pedona por no haberte contestadoantes, estuve de viaje de trabajo sin conexion a internet.

lo voy a probar ahora mismo.

muchusimas gracias,

Share this post


Link to post
Share on other sites
En ‎11‎/‎03‎/‎2019 at 18:48 , avalencia dijo:

Hola nuevamente

Como dijiste " tengo que contar con 2 o más condiciones" se entendía que todas juntas, aclarado que no es así, pues debes de usar una sentencia sql por cada conteo pero, ojo, no es necesario abrir y cerrar la conexión, basta tener un bucle y asignar los valores en matriz:

 Sub Contar_Datos()

    Dim cn As Object
    Dim datos As Object
    Dim consultaSql  As String
    Dim conexion As String
    Dim nRST As Long, x As Long
    Dim Valores(1 To 3) As String
    
    Valores(1) = "CIERRE ROTO"
    Valores(2) = "Tacon"
    Valores(3) = "Piel"
    
    Set cn = CreateObject("ADODB.Connection")
    conexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Users\Desktop\Base.accdb"
   
    cn.Open conexion

    For x = LBound(Valores) To UBound(Valores)
        
        consultaSql = "Select count (Motivo) from Consulta where Motivo ='" & Valores(x) & "'"
        Set datos = cn.Execute(consultaSql)
        nRST = datos(0)
        MsgBox Valores(x) & " :" & nRST
        datos.Close
        Set datos = Nothing
    
    Next x
    
    cn.Close
    Set cn = Nothing
          
End Sub

Abraham Valencia

Perdona @avalencia

Como debo de unir la linea que me has pasado con el rango por fechas??.

he probado varis cosas pero todas me dan error.

consultaSql = "Select count (Motivo) from Consulta where Motivo='" & Valores(x) & "'", Fechas Between #03/18/2019# And #03/19/2019#"

Pd: lo que me pasastes funciona perfectamente.

Muchisimas gracias.

Edited by lphant

Share this post


Link to post
Share on other sites
Hace 55 minutos , avalencia dijo:

Hola

consultaql = "Select count (Estado) from Consulta where Estado ='" & Valores(x) & "' And Fechas Between #03/18/2019# And #03/19/2019#"

Abraham Valencia

Muchas gracias.

Antes de escribir lo estuve probando así y no me funcionaba, ya he visto el por qué, me sobraban unas comillas.

lo dicho, muchas gracias.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png