Cómo mostrar varios resultados en un solo campo de consulta en su acceso

Comparte ahora:

Si alguna vez ha necesitado generar una lista delimitada de valores de campos/consultas junto con otra información de su base de datos, sabrá que puede ser, en el mejor de los casos, un desafío, y una tarea que la mayoría de la gente cree imposible. Si, por ejemplo, le han pedido que genere un informe sobre quiénes fueron los 5 mejores vendedores (en orden descendente) para cada mes del año, o las 3 tiendas más cercanas a cada cliente, entonces probablemente tendrá que lidiar con consultas de tabla cruzada o combinar manualmente los resultados fuera de Access. Pero con la ayuda de un poco de código VBA, podrá generar resultados como los siguientes en cuestión de minutos…

Ene Juan, Sally, Bill
Feb Sally, Adán, John
Mar Adán, Sally, Bill

Hay muchas ocasiones en las que sería útil poder mostrar una lista delimitada de resultados como parte de una consulta más grande: una lista de los 3 principales clientes más importantes para cada representante de ventas, las 5 tiendas más cercanas a cada uno de sus clientes que más gastan. , la lista continua.

Deja de coser tu informe

Sra. AccessSi bien es más que posible obtener los detalles para crear ese tipo de informe, generalmente terminaría teniendo que unir manualmente los resultados fuera de Access como parte de una hoja de cálculo o informe.

El siguiente código elimina la necesidad de jugar con los resultados de la consulta fuera de Access y, en cambio, le permitirá producir el tipo de resultados que se muestran arriba con facilidad.

Primero, describamos lo que queremos que el código pueda hacer:

"Dada una consulta, devuelve x número de resultados, combinados en una sola cadena delimitada por y"

Antes de que comencemos

Antes de mirar el código, es importante tener en cuenta que si bien es posible crear una función VBA que sea más genérica y capaz de manejar cualquier combinación de consulta, hacerlo daría como resultado un código bastante largo, así que lo que haremos en este artículo es definir un caso de ejemplo y escribir la función para manejar ese caso. Si lo hace de esta manera, será mucho más fácil para usted poder recrear el código para satisfacer sus necesidades específicas.

El caso de muestra

Tenemos una base de datos de ventas que almacena detalles de las compras de los clientes, junto con la categoría de producto al que pertenece la compra. Queremos producir un informe que muestre, por mes, las 3 categorías principales en orden descendente.

Para simplificar, mantendremos el ejemplo en una sola tabla, aunque el principal funcionará independientemente de su configuración. La tabla que usaremos está configurada de la siguiente manera:

Ventas
Nombre del cliente
Fecha de Transacción
Valor de la transacción
Categoría

Obviamente, esta es una configuración demasiado simplificada, pero entiendes la idea.

Ahora - el código

Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
    Dim sSql, resultString As String
    Dim rst As Recordset
    Dim firstLine As Boolean
    
    'Create our SQL string using the supplied parameters
    sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
    If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
    
    Set rst = CurrentDb.OpenRecordset(sSql)
    
    firstLine = True
    
    'Loop through the results, and create the string to return
    With rst
        Do While Not .EOF
            If Not firstLine Then
                resultString = resultString & Delimiter & .Fields("category")
            Else
                resultString = resultString & .Fields("category")
                firstLine = False
            End If
            
        .MoveNext
        Loop
    End With
    
    Set rs = Nothing
    CategoryList = resultString
End Function

El código - explicado

Código VBAComo puedes ver, el código es bastante intuitivo. Comenzamos utilizando los parámetros proporcionados para construir nuestra consulta. Una vez creada la cadena de consulta, la ejecutamos y recorremos los resultados, concatenándolos para formar la única cadena de resultados que buscamos.

Notará que verificamos si debemos agregar un delimitador a la cadena o no; sin esta verificación, terminaría con una cadena de resultado con un formato deficiente o tendría que agregar código para eliminar delimitadores no deseados. De esta manera, las cosas se mantienen ordenadas y agradables desde el principio.

Por supuesto, la función en sí se puede llamar desde una consulta, un informe o desde cualquier lugar que desee desde Access.

Reparar la base de datos de acceso corrupta

Si te encuentras bases de datos de Access corruptas cuando ejecuta el código anterior, es mejor usar alguna herramienta especializada para repararlos y recuperar todas las tablas de las bases de datos corruptas.

Introducción del autor:

Mitchell Pond es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparar problema de SQL y productos de software de recuperación de Excel. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.