Access - Numerar registros en un query o consulta

 
Vista:
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Numerar registros en un query o consulta

Publicado por Jose (137 intervenciones) el 26/07/2024 21:02:10
Buen día
saludos a todos
el dia de hoy me tope con esta situacion
necesito crear un query o consulta pero que cada registro que obtenga esta numerado con un consecutivo de acuerdo a la cantidad de registros que coincidan con el mismo proveedor

ejemplo

linea Codigo descripción proveedor
1 20418 pluma papeleria la bonita
2 20560 lápiz papeleria la bonita
1 10244 tornillo ferreteria la nueva
2 10456 tuerca ferreteria la nueva
1 30458 aceite refacciones la nueve
1 21458 toner compu-sales

sera posible esto?

Tengo esta rutina que habia encontrado en la red, pero no se como adaptarla a mi query

Para numerar registros en un query
crear un modulo y copia esta funcion, salvarlo:

Public Function numerarSQL(nDato) As Long
'variable que no se pierde entre las distintas llamadas
Static nOrdenn As Integer
If IsNull(nDato) Then 'si nDato es nulo: variable a cero y salida
nOrdenn = 0
Exit Function
End If
nOrdenn = nOrdenn + 1
numerarSQL = nOrdenn
End Function

Y en el query, convertirlo a slq y anexar este código


SELECT numerarSQL(UnCampoDeLaConsulta o tabla) AS RegNum, * FROM nombreConsulta o tabla
UNION SELECT
numerarSQL(null), * FROM nombreConsulta o tabla WHERE 1=0;

se van a mostrar todos los campos de la consulta o tabla pero con un campo adicional regnun donde se numera cada registro

Gracias de ante mano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Numerar registros en un query o consulta

Publicado por Anonimo (3398 intervenciones) el 26/07/2024 23:02:54
Esa consulta tiene otra aplicación y no vale para ese propósito (no diferencia entre proveedores ni productos, comenzará en la unidad y se incrementa en cada registro devuelto).

La solución tiene mas posibilidades con VBA .

Se debería ordenar por Proveedor y contar (numerar) las recurrencias.

En base a la muestra publicada, con este código se obtiene el mismo resultado, a la tabla se la denomino 'Ordenar' se ordena por 'Proveedor' y se actualiza el campo 'Linea'.

La Función base

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Orden(X_Tabla$, X_Orden$, X_Dato$)
Dim T_Tabla As Recordset, Control As String, Cuenta As Long
Set T_Tabla = CurrentDb.OpenRecordset("Select * from " & X_Tabla & " Order By " & X_Orden)
With T_Tabla
If .RecordCount <> 0 Then .MoveLast: .MoveFirst
Control = .Fields(X_Orden)
Cuenta = 0
Do Until T_Tabla.EOF
If Control = .Fields(X_Orden) Then Cuenta = Cuenta + 1 Else Control = .Fields(X_Orden): Cuenta = 1
.Edit: .Fields(X_Dato) = Cuenta: .Update
.MoveNext
Loop
.Close
End With
End Function

La llamada (aplicación practica) en la línea de inmediato

1
? Orden("Ordenar", "Proveedor", "Linea")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Numerar registros en un query o consulta

Publicado por Jose (137 intervenciones) el 29/07/2024 20:22:26
Gracias por responder

he probado este ejemplo, pero me da un error,
lo estoy mandando llamar desde un OnLoad al abrir mi formulario, no sé si este correcto?
o en donde debo poner el

? Orden("Ordenar", "Proveedor", "Linea")

anexo zip con la imagen del error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Numerar registros en un query o consulta

Publicado por Anonimo (3398 intervenciones) el 29/07/2024 21:05:31
Si tienes una tabla que se llame 'Ordenar' con al menos dos campos, uno de ellos de nombre 'Proveedor' y otro que se denomine 'Linea' no debería dar problema.

La función requiere tres parámetros: una tabla + un campo por el que ordenar + otro en el que guardar el dato y por el error que has publicado uno de ellos (probablemente una tabla de nombre 'Ordenar') no la localiza, lo que equivale a un NULL y lo delata.

Como función que es, si esta declarada en un modulo publico puede ser utilizada desde cualquier parte de la aplicación solo hay que respetar el separador de listas desde fuera de VBA.

Los nombres de tabla y campos (los parámetros) deben de existir en la aplicación y cuando se lance la función a tabla deberá estar liberada para permitir su edición.

Para utilizarlo como origen de datos de un formulario, lo correcto seria ejecutar primero la función (corrige los datos de/en la tabla) y tras ello se le asigna la tabla corregida como origen de datos del formulario.

Vale para cualquier tabla existente, cualquier campo que sea ordenable y el campo a modificar puede ser cualquiera que no tenga otra aplicación.

Lo normal es que los nombres de las tablas y campos no contengan espacios, (de contenerlos se deberían utilizar corchetes)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Numerar registros en un query o consulta

Publicado por Jose (137 intervenciones) el 30/07/2024 17:45:56
Buen día, funcionando ,
estaba cometiendo el error de querer escribrir en el query y no se podia por estar construido por varias tablas

gracias por la ayuda

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo Pérez Fernández

Numerar registros en un query o consulta

Publicado por Eduardo Pérez Fernández (350 intervenciones) el 28/07/2024 16:16:04
La respuesta que le dan es excelente mientras se trabaje con tablas con poca información, se afecta el rendimiento en tablas de gran tamaño. Esta es una de las consideraciones y limitaciones que me han obligado migrar a un servidor de datos como PostgreSQL, sin ofender y a manera de ilustración le explico cómo se haría en PostgreSQL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE productos (
    codigo INT,
    descripcion VARCHAR(255),
    proveedor VARCHAR(255)
);
 
INSERT INTO productos (codigo, descripcion, proveedor) VALUES
(20418, 'pluma', 'papelería la bonita'),
(20560, 'lápiz', 'papelería la bonita'),
(10244, 'tornillo', 'ferreteria la nueva'),
(10456, 'tuerca', 'ferreteria la nueva'),
(30458, 'aceite', 'refacciones la nueva'),
(21458, 'toner', 'compu-sales');
 
SELECT
    codigo,
    descripcion,
    proveedor,
    ROW_NUMBER() OVER (PARTITION BY proveedor ORDER BY codigo) AS linea
FROM
    productos;

ROW_NUMBER() OVER (PARTITION BY proveedor ORDER BY codigo): Esta es la función de ventana que asigna un número secuencial a cada fila dentro de cada partición (en este caso, cada proveedor). El número se reinicia para cada grupo de proveedor y se ordena por codigo dentro de cada grupo. Algo imposible de hacer en Access.

El resultado es: (Observe que no se requiere crear el campo línea en la tabla, se obtiene con el Alias de la consulta). Son solo 7 líneas para la consulta frente a 15 líneas en Access VBA, además de la limitación en grandes volúmenes de datos.


nada

Hay que ir pensando en migrar a un servidor de datos Access es un gran Frond End pero pésimo BackEnd. Si utiliza PostgreSQL y crea todas la consultas y funciones en el servidor, ya tiene lista su informacion para cambiar de Front End, puede ser Java, C# o Python. Pido disculplas si mi respuesta molesta a alguien en el foro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Numerar registros en un query o consulta

Publicado por Jose (137 intervenciones) el 30/07/2024 17:46:57
gracias eduardo, muy buena sugerencia, la tomare en cuenta, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar