MS Access 2003: cree un número de serie que usted controle y asigne ese número de serie cada vez que abra un formulario

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

MS Access 2003: cree un número de serie que usted controle y asigne ese número de serie cada vez que abra un formulario

Este tutorial de MSAccess explica cómo crear un número de serie que usted controla y asignarlo cada vez que se abre un formulario en Access 2003 (con capturas de pantalla e instrucciones paso a paso).

Problema: en Microsoft Access 2003/XP/2000/97, quiero crear un formulario que, cuando se abra, asigne al campo PODNumber un número de secuencia que pueda controlar. Necesito el número de serie en el formato:

POD00000001

Donde

VAINA = tipo
00000001 = número de serie

Quiero que el formulario me permita ingresar algunos valores comunes y seleccionar el valor BoxTrack del cuadro combinado. Luego, cuando hago clic en un botón, quiero ejecutar un código VBA que usará los valores para insertar un registro en la tabla BoxesDispatched. Finalmente, quiero un subformulario que muestre todos los registros de BoxesDispatched, incluido el que acabo de crear.

¿Es posible?

Respuesta: Hemos creado una base de datos de Access de muestra que puede descargar que demuestra cómo crear números de serie que puede controlar como se describe anteriormente.

Descargar versión en Access 2000

Veamos este ejemplo. Tenemos una tabla BoxesDispached con los siguientes campos: BoxTrack, JobID, DateReturned, TimeReturned, Dispatchedby, PODNumber (el número de secuencia asignado).

Cuando abrimos una base de datos de Access, un archivo llamado frmAddBoxesDispatched se abrirá automáticamente, permitiéndonos crear registros en la tabla BoxesDispatched. Este formulario funciona de la siguiente manera:

paso 1, cuando se abre el formulario, al campo PODNumber se le asignará un número de secuencia de acuerdo con el formato POD00000001 especificado anteriormente.

Paso 2, el usuario ingresará un valor común para cada registro BoxesDispatched.

Paso 3, el usuario seleccionará un valor de BoxTrack del cuadro combinado. A continuación, el usuario hará clic en el botón “Crear registro en la tabla BoxesDispatched”, que creará un registro en la tabla BoxesDispatched en función de los valores ingresados ​​​​en este formulario.

Después de que se complete el código VBA, mostrará el siguiente mensaje si todo fue exitoso.

A continuación, actualizará el subformulario BoxesDispatched para mostrar los registros en la tabla BoxesDispatched, incluido el registro recién agregado.

El usuario puede controlar la asignación del siguiente número a través de la tabla de códigos. En esta tabla, hay un registro “POD” que muestra el último número asignado. El usuario puede modificar este valor en consecuencia para comenzar con cualquier número adecuado.

En el evento de carga del formulario, hay un código que asigna el siguiente número de POD.

Private Sub Form_Load()

   'Assign a new PODNumber
   PODNumber = NewPODNumber

End Sub

Acerca de los eventos de clic Crear registros en la tabla BoxesDispatched , hay un código para garantizar que se ingrese un valor válido en frmAddBoxesDispatched y llame a la función para crear un nuevo registro.

Private Sub cmdCreate_Click()

   Dim LResponse As Integer

   'Must enter a PODNumber
   If IsNull(PODNumber) = True Or Len(PODNumber) = 0 Then
      LResponse = MsgBox("You must enter a valid POD Number.", vbInformation, "Validation Failed")
      PODNumber.SetFocus

   'Must enter a Job
   ElseIf IsNull(JobID) = True Or Len(JobID) = 0 Then
      LResponse = MsgBox("You must enter a valid Job.", vbInformation, "Validation Failed")
      JobID.SetFocus

   'Must enter a DateReturned
   ElseIf IsNull(DateReturned) = True Or Len(DateReturned) = 0 Then
      LResponse = MsgBox("You must enter a valid Date Returned.", vbInformation, "Validation Failed")
      DateReturned.SetFocus

   'Must enter a TimeReturned
   ElseIf IsNull(TimeReturned) = True Or Len(TimeReturned) = 0 Then
      LResponse = MsgBox("You must enter a valid Time Returned.", vbInformation, "Validation Failed")
      TimeReturned.SetFocus

   'Must enter a Dispatchedby
   ElseIf IsNull(Dispatchedby) = True Or Len(Dispatchedby) = 0 Then
      LResponse = MsgBox("You must enter a valid Dispatched by.", vbInformation, "Validation Failed")
      Dispatchedby.SetFocus

   'Must enter a BoxTrack
   ElseIf IsNull(BoxTrack) = True Or Len(BoxTrack) = 0 Then
      LResponse = MsgBox("You must enter a valid Box Track.", vbInformation, "Validation Failed")
      BoxTrack.SetFocus

   'Create records
   Else
      If CreateBoxesDispatched(Form_frmAddBoxesDispatched) = True Then

         'Clear and refresh BoxTrack combo box
         BoxTrack.Value = Null
         BoxTrack.Requery

         'Refresh subform to reflect new records just added
         frmBoxesDispatched.Requery

         MsgBox "Records were successfully created and should now be visible in this form."

      Else
         MsgBox "Failed."
      End If

   End If

End Sub

Luego, en el Módulo 1 de la base de datos de Access, hay una función llamada CreateBoxes enviados Esto estableció un nuevo récord.

Function CreateBoxesDispatched(pfrm As Object) As Boolean

   Dim db As Database
   Dim LInsert As String

   On Error GoTo Err_Execute

   Set db = CurrentDb()

   'Create new record
   LInsert = "Insert into BoxesDispatched (BoxTrack, JobID, DateReturned,"
   LInsert = LInsert & " TimeReturned, DispatchedBy, PODNumber) VALUES ("
   LInsert = LInsert & "'" & pfrm.BoxTrack & "'"
   LInsert = LInsert & ", '" & pfrm.JobID & "'"
   LInsert = LInsert & ", #" & pfrm.DateReturned & "#"
   LInsert = LInsert & ", #" & pfrm.TimeReturned & "#"
   LInsert = LInsert & ", " & pfrm.Dispatchedby
   LInsert = LInsert & ", '" & pfrm.PODNumber & "')"

   db.Execute LInsert, dbFailOnError

   Set db = Nothing

   CreateBoxesDispatched = True

   Exit Function

Err_Execute:
   'An error occurred
   CreateBoxesDispatched = False
   MsgBox "An error occurred while trying to add a new BoxesDispatched record."

End Function

Luego, en el Módulo 1 de la base de datos de Access, hay una función llamada Nuevo número de POD Devuelve el siguiente número en la secuencia y los incrementos Last_Nbr_Assigned El campo consta de 1.

Function NewPODNumber() As String

   Dim db As Database
   Dim LSQL As String
   Dim LUpdate As String
   Dim LInsert As String
   Dim Lrs As DAO.Recordset
   Dim LNewPODNumber As String

   On Error GoTo Err_Execute

   Set db = CurrentDb()

   'Retrieve last number assigned for PODNumber
   LSQL = "Select Last_Nbr_Assigned from Codes"
   LSQL = LSQL & " where Code_Desc="POD""

   Set Lrs = db.OpenRecordset(LSQL)

   'If no records were found, create a new PODNumber in the Codes table
   'and set initial value to 1
   If Lrs.EOF = True Then

      LInsert = "Insert into Codes (Code_Desc, Last_Nbr_Assigned)"
      LInsert = LInsert & " values "
      LInsert = LInsert & "('POD', 1)"

      db.Execute LInsert, dbFailOnError

      'New PODNumber is formatted as "POD00000001", for example
      LNewPODNumber = "POD00000001"

   Else
      'Determine new PODNumber
      'New PODNumber is formatted as "POD00000001", for example
      LNewPODNumber = "POD" & Format(Lrs("Last_Nbr_Assigned") + 1, "00000000")

      'Increment counter in Codes table by 1
      LUpdate = "Update Codes"
      LUpdate = LUpdate & " set Last_Nbr_Assigned = " & Lrs("Last_Nbr_Assigned") + 1
      LUpdate = LUpdate & " where Code_Desc="POD""

      db.Execute LUpdate, dbFailOnError

   End If

   Lrs.Close
   Set Lrs = Nothing
   Set db = Nothing

   NewPODNumber = LNewPODNumber

   Exit Function

Err_Execute:
   'An error occurred, return blank string
   NewPODNumber = ""
   MsgBox "An error occurred while trying to determine the next PODNumber to assign."

End Function

Si después de probar este ejemplo obtiene un error “indefinido” en la declaración “Dim db as Database”, debe seguir algunas instrucciones adicionales.