Imprimir página | Cerrar ventana

Consultas. Simulación Autonumérico 2

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Tus Funciones Favoritas & Aportaciones & Artí­culos
Descripción del foro: Para publicar código interesante, aportaciones y artículos
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=77400
Fecha de impresión: 15/Agosto/2020 a las 02:12


Tema: Consultas. Simulación Autonumérico 2
Publicado por: genoma111
Asunto: Consultas. Simulación Autonumérico 2
Fecha de publicación: 21/Agosto/2013 a las 17:38
Palabras Clave: Simulación, Simulacion, Autonumérico, Autonumerico, Numeración, Numeracion, Consulta.

Una pregunta recurrente es la simulación de autonuméricos en consultas.

Para ello construí una función que siempre va a enumerar consecutivamente los registros de una consulta.

Para que funcione, la consulta se debe haber guardado

El parámetro "NombreConsulta", se refiere a la propia consulta en la que estamos trabajando.

Si el tipo de dato del campo por el que vamos a numerar no es Numérico, debemos cambiar la declaración de ValorCampoID al tipo correspondiente:

Número

ValorCampoID As Long,

Texto

ValorCampoID As String,

Fecha

ValorCampoID As Date,


Igualmente, debemos cambiar esta línea para que refleje el tipo correspondiente:

Número

.FindFirst "[" & NombreCampoID & "] = " & ValorCampoID

Texto

.FindFirst "[" & NombreCampoID & "] = '" & ValorCampoID & "'"

Fecha

.FindFirst "[" & NombreCampoID & "] = #" & ValorCampoID & "#"


Uso:
Estando en la consulta "Query1" en un campo calculado se escribe lo siguiente:

Expr1: Numeracion("ID",[ID],"Query1")

Por supuesto, el campo ID (o cualquier campo que no admita duplicados) debe hacer parte de la consulta (y estar visible) para que el código trabaje, por ejemplo:

SELECT Table1.ID, Table1.CampoFecha, Table1.dni, Numeracion("ID",[ID],"Query1") AS Expr1
FROM Table1
WHERE (((Table1.CampoFecha) >= #6/1/2012#))
ORDER BY Table1.CampoFecha DESC;

Se puede ordenar ascendente o descendente por cualquier campo, añadir criterios, etc y siempre enumera bien.

Solo recuerden que después de cualquier cambio deben hacer Ctrl+S

Ahora sí, la Función:

Public Function Numeracion(NombreCampoID As String, _
                            ValorCampoID As Long, _
                          NombreConsulta As String) As Long
    Dim rst As DAO.Recordset
    Dim lngVA As Long
    
    On Error Resume Next
       
       Set rst = CurrentDb.OpenRecordset(NombreConsulta, dbOpenDynaset)
    
       With rst
           .FindFirst "[" & NombreCampoID & "] = " & ValorCampoID
            lngVA = .AbsolutePosition + 1
       End With
           
    Numeracion = lngVA

End Function


-------------
"To VBA or not to VBA... that's the question" DFP



Imprimir página | Cerrar ventana