Access - Renumeración Automática

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido su posición en 22 puestos en Access (en relación al último mes)
Gráfica de Access

Renumeración Automática

Publicado por eduard (16 intervenciones) el 01/09/2014 12:54:36
Hola, tengo un formulario "Filiació" unido a un subformulario "Visor" por el campo de texto "ID" y quisiera realizar en el subformulario:

- Numerar registros con Formato Numérico consecutivamente al crearlos.

- Al eliminar registros concretos, renumerar los registros de forma que vuelvan a quedar consecutivos.

Tengo un código que me proporcionó Neckitto, que yo adapté a mis necesidades y que funciona bien cuando el campo ID es numérico, pero si es texto no funciona, me podríais ayudar?

Os mando 2 ejemplos:

1 AutonumericoSubformUnicNum funciona ya que "ID" es numérico

2 AutonumericoSubformUnicText NO funciona ya que "ID" es texto (?¿)

Gracias!!!

Option Compare Database
Option Explicit
'Declaramos las variables a nivel de módulo
Dim vID As String
Dim idExaminat As Long
Dim I As Long
Dim miSql As String
Dim assignat As Boolean
Dim rst As DAO.Recordset

Private Sub New_Click()
DoCmd.GoToRecord , , acNewRec
'Variables declaradas a nivel de módulo
'Cogemos el valor que une formulario y subformulario
vID = Me.Id.Value
'Si no hay valor salimos
If vID = Null Then Exit Sub
'Creamos la SQL
miSql = "SELECT Visor.Identitat FROM Visor" _
& " WHERE Visor.ID=" & vID _
& " ORDER BY Visor.Identitat"
'Creamos el recordset sobre la consulta
Set rst = CurrentDb.OpenRecordset(miSql)
'Si no hay registros asignamos el valor 1
If rst.RecordCount = 0 Then
Me.Identitat.Value = 1
GoTo Salida
End If
'Inicializamos assignat
assignat = False
'Inicializamos i
I = 1
'Recorremos los registros de la SQL
With rst
.MoveFirst
Do Until .EOF
'Si no hay coincidencia en la numeración asignamos el número
'correlativo que corresponda, cambiamos assignat y salimos del DO
If .Fields("Identitat").Value <> I Then
Me.Identitat.Value = I
assignat = True
Exit Do
End If
I = I + 1
.MoveNext
Loop
End With
'Comprobamos si ya se ha assignat número. Si no se hubiera assignat le
'correspondería el siguiente al i analizado
If assignat = False Then
Me.Identitat.Value = I
End If
'---FASE 2: RENUMERACIÓN DE LOS IDENTIFICADORES
'Nos aseguramos de que la información esté guardada en la tabla
DoCmd.RunCommand acCmdSaveRecord
'Creamos la SQL de nuevo para capturar la nueva información
miSql = "SELECT Visor.Identitat FROM Visor" _
& " WHERE Visor.ID=" & vID _
& " ORDER BY Visor.Identitat"
'Creamos el recordset sobre la consulta
Set rst = CurrentDb.OpenRecordset(miSql)
'Contamos los registros existentes. Si no hubiera registros salimos del proceso
If rst.RecordCount = 0 Then GoTo Salida
'Inicializamos i
I = 1
'Realizamos un recorrido de los registros para asignar la numeración correlativa,
'si procede
With rst
.MoveFirst
Do Until .EOF
'Cogemos el valor del identificador
idExaminat = .Fields("Identitat").Value
'Miramos si no está bien ordenado
If idExaminat <> I Then
'Le asignamos la numaración que corresponda
.Edit
.Fields("Identitat").Value = I
.Update
End If
'Añadimos una unidad de i
I = I + 1
'Nos movemos al siguiente registro
.MoveNext
Loop
End With
'Refrescamos los datos en el formulario
Me.Refresh
Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End Sub

Private Sub Delete_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
'Variables declaradas a nivel de módulo
'Cogemos el valor que une formulario y subformulario
vID = Me.Id.Value
'Si no hay valor salimos
'If vID = 0 Then Exit Sub
If vID = Null Then Exit Sub
'Creamos la SQL
miSql = "SELECT Visor.Identitat FROM Visor" _
& " WHERE Visor.ID=" & vID _
& " ORDER BY Visor.Identitat"
'Nos aseguramos de que la información esté guardada en la tabla
DoCmd.RunCommand acCmdSaveRecord
'Creamos la SQL de nuevo para capturar la nueva información
miSql = "SELECT Visor.Identitat FROM Visor" _
& " WHERE Visor.ID=" & vID _
& " ORDER BY Visor.Identitat"
'Creamos el recordset sobre la consulta
Set rst = CurrentDb.OpenRecordset(miSql)
'Contamos los registros existentes. Si no hubiera registros salimos del proceso
If rst.RecordCount = 0 Then GoTo Salida
'Inicializamos i
I = 1
'Realizamos un recorrido de los registros para asignar la numeración correlativa, si procede
With rst
.MoveFirst
Do Until .EOF
'Cogemos el valor del identificador
idExaminat = .Fields("Identitat").Value
'Miramos si no está bien ordenado
If idExaminat <> I Then
'Le asignamos la numaración que corresponda
.Edit
.Fields("Identitat").Value = I
.Update
End If
'Añadimos una unidad de i
I = I + 1
'Nos movemos al siguiente registro
.MoveNext
Loop
End With
'Refrescamos los datos en el formulario
Me.Refresh
Forms.Filiació.Visor.Form.Recordset.MoveFirst
Forms.Filiació.Visor.Form.Recordset.MoveLast
Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
DoCmd.SetWarnings True
End Sub
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

Renumeración Automática

Publicado por Emilio (1 intervención) el 02/09/2014 00:21:03
Mientras te contesta neckkito, puedes mirar en mis funciones favoritas del foro de access y vba:
http://www.mvp-access.com/foro/forums.html
Hay varias funciones para numerar de genoma111 para los tres casos (numero, letras y fecha) y otra de marius.

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
sin imagen de perfil
Val: 7
Ha disminuido su posición en 22 puestos en Access (en relación al último mes)
Gráfica de Access

Renumeración Automática

Publicado por eduard (16 intervenciones) el 03/09/2014 00:07:56
Hola, he estado revisando y no he encontrado ningún mensaje para renumerar, ni de genoma111 ni de marius, puedes facilitarme el link o explicarme los criterios de búsqueda?

Gracias
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

Renumeración Automática

Publicado por Emilio (232 intervenciones) el 03/09/2014 02:37:35
yo encontre estos 4:
http://www.mvp-access.com/foro/consultas-simulacin-autonumrico-3_topic77401.html
http://www.mvp-access.com/foro/consultas-simulacin-autonumrico-2_topic77400.html
http://www.mvp-access.com/foro/consultas-simulacin-autonumrico-1_topic77399.html
http://www.mvp-access.com/foro/consultas-numerar-registros-en-consultas_topic77308.html
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
sin imagen de perfil
Val: 7
Ha disminuido su posición en 22 puestos en Access (en relación al último mes)
Gráfica de Access

Renumeración Automática

Publicado por eduard (16 intervenciones) el 03/09/2014 11:44:18
Gracias, lo reviso y te cuento...
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
sin imagen de perfil
Val: 7
Ha disminuido su posición en 22 puestos en Access (en relación al último mes)
Gráfica de Access

Renumeración Automática

Publicado por eduard (16 intervenciones) el 04/09/2014 00:40:26
El problema estaba ahi:

& " WHERE Visor.ID= '" & vID & "'" _

Me faltaban comillas dado que vID es un campo texto y no un campo numérico.

Ahora ya funciona, muchisimas gracias a todos por vuestro tiempo!!!
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 Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Renumeración Automática

Publicado por Neckkito (1157 intervenciones) el 06/09/2014 08:57:44
Hola, Eduard!

¡Vaya una temporadita que llevo! Ahora he podido ver tu mensaje, y, afortunadamente, compruebo que has encontrado solución. Me alegro por ello.

Aprovecho para saludarte, Emilio

Un abrazo a ambos.

Neckkito
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