MS Access 2003: Cree números de serie que se puedan controlar usando formatos como A05-0001

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 números de serie que se puedan controlar usando formatos como A05-0001

Este tutorial de MSAccess muestra cómo crear números de serie para su control utilizando formatos como A05-0001 en Access 2003 (con capturas de pantalla e instrucciones paso a paso).

P: En Microsoft Access 2003/XP/2000/97, intento crear números ordinales en el siguiente formato:

A05-0001

Donde

A = tipo_de_elemento
05 = dos últimos dígitos del año (fecha del sistema)
0001 = número de serie

El año debe cambiarse automáticamente según la hora del sistema, y ​​el número de serie debe restablecerse a uno a medida que cambia el año.

¿Es posible?

R: Hemos creado una base de datos de Access de muestra que puede descargar y que demuestra cómo crear números de serie que se pueden controlar con el formato anterior.

Descargar versión en Access 2000

Veamos este ejemplo. A continuación, tenemos un formulario que permite al usuario ingresar registros. El usuario ingresará el tipo de elemento y el formulario asignará automáticamente un número de secuencia al campo de número de secuencia.

El usuario puede controlar la asignación del siguiente número a través de la tabla de códigos.En esta tabla, hay dos registros. Una (es decir, Accidentes) – Uno para 2004, indicado por A04, y uno para 2005, indicado por A05.una entrada más F (es decir, fuego) es 2005, representado por F05.

Si la tabla de códigos no contiene una entrada para el tipo de elemento seleccionado en el cuadro combinado, creará una entrada en la tabla de códigos para el nuevo tipo de elemento y asignará el campo Last_Nbr_Assigned a 1.

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

Function NewSeqNumber(pItem_Type) As String

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

   On Error GoTo Err_Execute

   Set db = CurrentDb()

   'Retrieve last 2 digits of current year
   LYear = Mid(CStr(Year(Date)), 3, 2)

   'Retrieve last number assigned for item_type/year combination
   LSQL = "Select Last_Nbr_Assigned from Codes"
   LSQL = LSQL & " where Code_Desc="" & pItem_Type & LYear & """

   Set Lrs = db.OpenRecordset(LSQL)

   'If no records were found, create a new item_type/year combination 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 & "('" & pItem_Type & LYear & "', 1)"

      db.Execute LInsert, dbFailOnError

      'New sequential number is formatted as "A05-0001", for example
      LSeqNumber = pItem_Type & LYear & "-" & Format(1, "0000")

   Else
      'Determine new sequential number
      'New sequential number is formatted as "A05-0001", for example
      LSeqNumber = pItem_Type & LYear & "-" & Format(Lrs("Last_Nbr_Assigned") + 1, "0000")

      '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="" & pItem_Type & LYear & """

      db.Execute LUpdate, dbFailOnError

   End If

   Lrs.Close

   Set Lrs = Nothing
   Set db = Nothing
   NewSeqNumber = LSeqNumber

   Exit Function

Err_Execute:
   'An error occurred, return blank string
   NewSeqNumber = ""
   MsgBox "An error occurred while trying to determine the next sequential number 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.

(Visited 3 times, 1 visits today)