** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Consultas. Simulación Autonumérico 2
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoConsultas. Simulación Autonumérico 2

 Responder Responder
Autor
Mensaje
genoma111 Ver desplegable
Administrador
Administrador
Avatar

Unido: 28/Marzo/2011
Localización: ...
Estado: Sin conexión
Puntos: 3248
Enlace directo a este mensaje Tema: Consultas. Simulación Autonumérico 2
    Enviado: 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


Editado por genoma111 - 21/Agosto/2013 a las 18:53
"To VBA or not to VBA... that's the question" DFP
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable