Todos los autonuméricos personalizados se basan en buscar el valor más alto almacenado en un campo, para posteriormente incrementarlo en 1 u otra cantidad, para el nuevo registro.
El valor 00003 no se muestra porque el registro ha sido eliminado.
Insertaremos un nuevo cuadro de texto en el formulario y a continuación escribiremos en su propiedad ‘Origen del control’ de la ficha Datos, la expresión que nos muestre el valor que necesitamos.
- Primero tendremos que obtener el valor máximo del campo (valor más alto).
Para ello utilizamos la función Dmáx() perteneciente al grupo de funciones: Agregadas de dominio.
DMáx(«expresión»; «dominio»; «criterios»)
- expresión: indicaremos el nombre del campo encerrado entre comillas dobles para el que deseamos obtener el valor máximo. Cuando vayamos a crear autonuméricos basados en formatos de varios bloques lo que haremos será utilizar una expresión.
- domino: nombre de la tabla o consulta donde se localiza el campo encerrado entre dobles comillas.
- criterios: condición / filtro para la selección del valor encerrado entre dobles comillas. Cuando vayamos a crear autonuméricos basados en formatos de varios bloques, tendremos que escribir condiciones para su selección.
1.- En el ejemplo de nuestra tabla de clientes la expresión quedaría de la siguiente manera:
Dmáx(“NumCliente”;”Clientes”)
Con esta función obtendríamos 4 que es el valor máximo para el campo NumCliente de la tabla de Clientes.
2.- Lo siguiente sería incrementarlo en 1 para obtener el valor para el nuevo registro:
Dmáx(“NumCliente”;”Clientes”) + 1
Ya hemos conseguido generar una expresión que nos ofrece el nuevo valor autonumérico para el campo NumCliente de la tabla de Clientes.
Pero como no es oro todo lo que reluce, si la tabla todavía no contiene registros, la función Dmáx() devolverá un valor Nulo (Vacío), con el que no se pueden realizar cálculos y en lugar de obtener el valor 1 obtendríamos un valor Nulo.
3.- Necesitamos convertir ese posible valor Nulo (vacío) en un valor numérico con el que poder calcular:
Para ello utilizamos la función Nz() perteneciente al grupo de funciones : Conversión.
Nz(«expresión»; «valorsiesnulo»)
- expresión: cualquier cálculo, campo o expresión que deseemos evaluar para comprobar si su valor/contenido es Nulo. En nuestro caso es donde tendremos que escribir toda la función Dmáx() que habíamos escrito.
- valorsiesnulo: valor que deseamos obtener si expresión resulta ser un valor Nulo. En nuestro caso indicaremos el valor 0.
Con esta función conseguimos que, si el valor obtenido con la función Dmáx es un valor Nulo, sea sustituido por un 0 con el que si podemos operar y obtener el valor 1 para el primer registro de la tabla.
La expresión final quedaría de la siguiente manera:
Nz( Dmáx(“NumCliente”;”Clientes”); 0 ) + 1
4.- A continuación, renombraremos el cuadro de texto desde su propiedad ‘Nombre’ de la ficha Otros. No es que sea un paso necesario, pero es recomendable asignarle un nombre con el que posteriormente podamos identificarlo mejor. En nuestro caso vamos a asignarle el nombre UltimoCliente.
5.- Ocultamos el cuadro de texto, modificando la propiedad ‘Visible’ de la ficha Formato. Es un control que lo necesitamos para realizar el cálculo, pero que no se le tiene que mostrar al usuario.
6.- Eliminamos la etiqueta asociada al cuadro de texto.
7.- El último paso consiste en enlazar de alguna manera el cuadro de texto donde se está mostrando el contenido del campo NumCliente, con el cuadro de texto que acabamos de crear donde se muestra el valor para el nuevo registro.
8.- Seleccionamos el cuadro de texto donde se muestra el contenido del campo NumCliente y en la propiedad ‘Valor predeterminado’ de la ficha Datos, introducimos el nombre que le hemos asignado al cuadro de texto que realizar los cálculos encerrándolo entre corchetes.
[UltimoCliente]
Si ahora guardamos el formulario y lo abrimos en vista formulario, veremos cómo al insertar un nuevo registro, Access le ofrece el siguiente valor libre para números de cliente.
Si observamos el valor obtenido, podremos comprobar que, aunque es el número que esperamos, el formato con el que lo presenta no es el correcto comparado con el resto de valores del campo NumCliente.
Valor obtenido -> 5, Valor con formato esperado -> 00005
9.- Para solucionarlo añadiremos una nueva función a la expresión que calcula el nuevo valor que añada ceros a la izquierda hasta completar la totalidad del tamaño del campo.
La función Format() nos permite formatear una expresión a un formato personalizado.
Format(expresión;formato)
- expresión: es donde colocaremos toda la expresión que nos calcula el nuevo valor.
- formato: escribiremos encerrado entre dobles comillas la expresión “00000”, con la que conseguiremos rellenar a ceros la parte del código no utilizada.
La expresión final quedaría de la siguiente manera:
Format( Nz( Dmáx(“NumCliente”;”Clientes”) ; 0 ) + 1 ; “00000”)
Con esta nueva expresión obtendremos el número esperado con el formato esperado.