Unir campo autonumerico y texto
La parte constante (A0200100101) no influye, solo se precisa la parte numérica que como es de longitud conocida, es sencillo extraerla
Basándose en que se desea un incremental, nos basaremos en el mayor del conjunto ya existente para obtener el ultimo y tras ello incrementarlo.
En el supuesto de que el campo se denomine UnCodigo y que pertenezca a una tabla llamada UnaTabla
Como obtener los 8 dígitos del contenido de 'UnCodigo' :
zzz = Mid ([UnCodigo], 12)
(el numero doce es el indicador de donde comienza la parte que nos interesa extraer de todo el conjunto)
Si el código fuera : A020010010100000001 el resultado obtenido seria '00000001'
Como es un texto, la función VAL lo convierte en numero:
zzz = Val(Mid ([UnCodigo], 12))
Como ya obtenemos el numero del contenido del campo, localizamos el mayor (función de dominio DMax)
zzz = Dmax("Val(Mid ([uncodigo], 12))", "UnaTabla")
En teoría esto nos devuelve (en este caso) el numero uno, lo incrementamos
zzz = Dmax("Val(Mid ([uncodigo], 12))", "UnaTabla") +1
Se desea que ocupe 8 espacios (rellenando con ceros por la izquierda):
zzz = Format (Dmax("Val(Mid ([uncodigo], 12))", "UnaTabla") +1 , "00000000")
Con lo que obtenemos '00000002' al que añadimos la parte constante:
zzz = "A0200100101" & Format (Dmax("Val(Mid ([uncodigo], 12))", "UnaTabla") +1 , "00000000")
¿Qué puede ocurrir si se inicializa la tabla y no existe ningún registro? ... considerando el caso aplicamos la función NZ:
zzz = "A0200100101" & Format (Nz(Dmax("Val(Mid ([uncodigo], 12))", "[UnaTabla]"), 0) +1 , "00000000")
Y como su destino se supone será el campo 'UnCodigo' de un nuevo registro, se lo adjudicamos:
Me.[UnCodigo] = "A0200100101" & Format (Nz(Dmax("Val(Mid ([uncodigo], 12))", "[UnaTabla]"), 0) +1 , "00000000")
Y salvo algún error de sintaxis la formula para obtener lo que se solicita queda asi:
Me.[UnCodigo] = "A0200100101" & Format (Nz(Dmax("Val(Mid ([uncodigo], 12))", "[UnaTabla]"), 0) +1 , "00000000")