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.