Hacer una tabla en access con dos campos autonuméricos

Espero me entiendan.
Quiero crear una tabla que contendrán dos campos autonuméricos.
El primer no lo necesito modificar .
El segundo campo autonumérico necesito cada cierto tiempo hacer un corte, y volver a crear el registro empezando desde 1, sin eliminar los registros anteriores.

3 respuestas

Respuesta
1

A preguntas concretas respuestas concretas. Si tengo la tabla Tabla2, en donde IdPrincipal es autonumérico y OtroId es numérico, le añado un campo SI/NO llamado Aux

En el formulario, que lo pongo tabular porque se ve mejor, a medida que voy rellenando datos

Vamos a suponer que quiero "reiniciar" el contador de OtroId. Pulso el botón y

En este caso, en el evento Después de actualizar del cuadro de texto Nombre le tengo puesto

Private Sub Nombre_AfterUpdate()
If Me.NewRecord Then
OtroId = Nz(DCount("*", "tabla2", "aux=0")) + 1
End If
End Sub

En el evento Después de actualizar del cuadro de texto Pais le pongo

Private Sub Pais_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
End Sub

Y por último, en el evento Al hacer clic del botón le pongo

Private Sub Comando9_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "update tabla2 set aux=-1"
Me.Requery
End Sub

En esencia, cuando escribo el nombre y pulso Enter, le digo que me cuente aquellos registros en que el campo Aux es 0 (Falso), que de momento, a medida que voy escribiendo, son todos. Luego, cuando quiero que reinicie el OtroId, lo que hace es poner los campos Aux de los registros anteriores en True, con lo que la cuenta se reinicia de nuevo.

Respuesta
1

Le dejo este completo desde otro punto de vista

TABLA

Adiciono un registro (continuando la numeración)

Haga clic en grabar y obtengo

Efectivamente me adiciona el registro con el número 13.

Adiciono un registro pero reiniciando la numeración

Hago clic en Si y obtengo

Efectivamente el campo "siguiente" se le asigna 1.

Código del formulario

Function sgte_nro() As Long
  If Me.opcForma = 1 Then ' Seguir numeración
    sgte_nro = Nz(DMax("siguiente", "tblnumera")) + 1
  Else
    sgte_nro = 1
  End If
End Function
Private Sub bntSalir_Click()
  DoCmd.Close acForm, Me.Name
End Sub
Private Sub btnGrabar_Click()
 On Error GoTo hay_error
 If Me.ctlArticulo <> "" And Me.ctlCantidad > 0 Then
    If Me.opcForma = 2 Then
        If MsgBox("¿Está seguro que reinicia la numeración", vbQuestion + vbYesNo + vbDefaultButton2, "Reinicio numeración") = vbYes Then
            CurrentDb.Execute "INSERT INTO tblnumera(articulo, cantidad, siguiente) VALUES('" & Me.ctlArticulo & "'," & Me.ctlCantidad.Value & "," & sgte_nro() & ")"
        Else
          MsgBox "Proceso abortado", vbInformation, "Le informo"
          Exit Sub
        End If
    Else
       CurrentDb.Execute "INSERT INTO tblnumera(articulo, cantidad, siguiente) VALUES('" & Me.ctlArticulo & "'," & Me.ctlCantidad.Value & "," & sgte_nro() & ")"
    End If
    If Err.Number = 0 Then
      MsgBox "Registro grabado OK", vbInformation, "Le informo"
    End If
 End If
hay_error_exit:
  Exit Sub
hay_error:
    MsgBox "Ocurrió el error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error.."
    Resume hay_error_exit
End Sub

Observe que utilizo una función a nivel de formulario para obtener el siguiente número con base en parámetro pasado, si es 1 toma el valor máximo más 1, sino, reinicia en 1. 

Tenga cuidado de utilizar Dcount() porque no retorna el valor exacto cuando se elimina un registro.

Si quiere el ejemplo lo puede solicitar a [email protected] favor en el asunto anotar la consulta.

Respuesta
-1

El primero déjaselo a Access, el segundo se tendrá que automatizar y permitir en diseño que existan elementos repetidos.

Si el segundo solo permite números (no implica series), dado que existirán repeticiones, se necesitara el auxilio del autonumérico (el natural de Access) para calcular el siguiente valor.

Una alternativa para generar el segundo autonumérico:

Utilizar la función DLookup para obtener el valor del segundo autonumérico, utilizando como condición que sea el mayor del primer autonumérico.

Se le incrementa una unidad al valor obtenido y ...

Al parecer no se entendió la respuesta (que es sencilla)

Tabla= Gastos
ID autonumérico = Clave
Incremental repetitivo = Zona

Siguiente = DLookup("Zona", "Gastos", "Clave = DMax('Clave', 'Gastos')") +1

Como el cambio se produce a voluntad, bastara que se le modifique el valor de 'Zona' a uno (también se puede automatizar)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas