Jump to content

Archived

This topic is now archived and is closed to further replies.

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

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

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.

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

 

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.

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

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,

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.

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.

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

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy