Autonumérico personalizado

Tengo una bd para llevar un archivo de documentos de access 2003 y tengo una consultilla. Explico, tengo una tabla principal donte tengo los datos de los documentos son id (clave principal), anoarchivo, numerocarpeta, numerodocumento... El tema está en el NUMERODOCUMENTO. He conseguido que sea autonumérico en el formulario de entrada de datos a través del códgo vb "Private Sub Form_Current() NUMERODOCUMENTO = DCount("NUMERODOCUMENTO", "CONTACTOS") + 1 End Sub" Esto trae el autonumérico según el ultimo numero registrado. Hasta ahí ok. Pero me interesa que este código me introduzca otra función, que es que se reinicie cuando cambie el NUMEROCARPETA. Es decir al cambiar el NUMEROCARPETA el NUMERODOCUMENTO se ponga a 1. NUMEROCARPETA Y NUMERO DOCUMENTO SON CAMPOS DE TEXTO.

1 respuesta

Respuesta
1
Sólo tienes que añadir al DCount un criterio de cuenta.
NUMERODOCUMENTO=DCount("[NUMERODOCUMENTO]","CONTACTOS","[NUMEROCARPETA]= ' " & NUMCARPETA & " ' ")+1
Donde NUMCARPETA es el nombre (ejemplo) del control donde se obtendrá el número de la carpeta que debe estar disponible en un control del formulario de entrada de datos. No sé si el evento Current es el mejor para este código, pero pruébalo y me dices que tal.
Hola
Gracias por contestar tan rápido. Con este código no se aumenta en 1 el NUMERODOCUMENTO cada vez que entro al formulario de entrada. Si ves que se puede hacer mejor de otra forma si eres tan amable me lo puedes explicar.
He puesto el evento en al activar registro del formulario de entrada de datos. Quizá sea mejor otra solución.
Un saludo.
¿Cuándo se abre el formulario, en qué registro se posiciona? (¿Nuevo, último, primero?)
Dependiendo de esto habrá que ver las posibles soluciones. En mi respuesta anterior sólo contesté a tu duda de como relacionar el autonumérico con el número de carpeta. Sólo te comenté lo otro porque desconzoco como utilizas el formulario, pero normalmente al cargar un registro, no se avanza en el autonumérico (pero eso depende del uso que estés haciendo del formulario, lo cual desconozco).
¿Verificaste si cuando se ejecuta el código está disponible el número de carpeta por el que quieres referenciar el documento?.
Coloca un punto de interrupción en el código y luego lo ejecutas paso a paso (F8), y verifica el valor que toman las variables y los controles. Me parece que el problema va a estar en que al cargar el formulario no hay un número de carpeta disponible.
La verdad es que no se donde esta el problema. El formulario se abre en nuevo registro pero tengo encabezando tres valores que vienen dados por relaciones o coódigos. ANOARCHIVO siempre esta en año actual para que guarde en la tabla ese valor. NUMEROCARPETA viene dado por una relación "= cuadro de texto" que tengo en la portada de la BD en la que cambio el numero cuando la carpeta física se llena. Y por ultimo está NUMERODOCUMENTO que tiene el código que puse antes por el que cada vez que entro al formulario de "NUEVO DOCUMENTO" me aumenta en 1 el ultimo valor que haya.
No se si me explico bien espero que si.
Un saludo y gracias de nuevo.
Ya veo. Entiendo que en el formulario tienes disponible el número de carpeta con el que estás trabajando.
Mi pregunta es ahora:¿En la misma tabla tienes los tres datos y se llaman igual que en el formulario?. Suponiendo que así sea, el DCount debería funcionar si has puesto los nombres correctamente.
Prueba poniendo el código también en el evento "Al abrir" del mismo formulario.
Creo que el tema puede estar en que el valor de NUMEROCARPETA viene dado por un "valor predeterminado", ¿es decir la fórmula de relación la puse en valor predeterminado y este no se hace efectivo hasta que se realice el registro por lo que no pilla el valor de numero carpeta no? Como puedo solucionarlo
OK, si es así está fácil.
En el evento en el que abres el segundo formulario a partir del primero (donde tienes el número de carpeta vigente de trabajo), supongo que tienes un OpenForm para abrirlo. Antes de abrir el formulario, guarda el valor del número de la carpeta en una variable. Luego de esto abres el segundo formulario con el OpenForm y le asignas al control del número de carpeta el valor de la variable anterior.
A continuación colocas el código que te día anteriormente utilizando indistintamente, para el número de carpeta, el valor guardado en la variable o el valor del control donde hayas actualizado dicho dato.
Creo que con eso lo debes resolver.
Ya estoy de nuevo aquí perdón por interrumpir la consulta pero he estado liado. Parece que el problema es eso de los valores predeterminados. TE explico la situación. En el formulario de portada, tengo un cuadro de texto independiente donde pongo la carpeta actual ( XV, XVI, XVII...) pero esta siempre en valor predeterminado (XV) y en este formulario portada tengo un botón que abre el formulario de nuevo documento que es el de entrada de datos donde tengo los campos que explique al inicio. En el campo de Numero Documento es donde tengo el autonumérico que quiero hacer que se reinicie cuando cambie el campo de Numero de Carpeta. El campo numero de carpeta TIENE COMO VALOR PREDETERMINADO el valor del campo de texto en el formulario de entrada.
¿Cómo puedo hacer para que el valor predeterminado sea efectivo al abrir el formulario?
Tambien me gustaria la solucion de que al abrir el formulario me pregunte el numero de carpeta en la que trabajar.
Un slaudo.
En un módulo de Visual declara una variable global para guardar y mantener el valor de la carpeta. Suponiendo que la llames VbCARPETA, sería:
Global VbCARPETA As String
Luego, en el botón del formulario de portada en el que abres el segundo formulario escribes (o incluyes en el que ya tengas) un evento en "Al hacer click":
VbCARPETA=nombrecuadrodetextodondetienesesevalor
DoCmd. OpenForm ("SEGUNDOFORMULARIO")
Numerodecarpeta=VbCARPETA 'Este numerodecarpeta debe ser el nombre del campo del numero de carpeta en el segundo formulario. Así traspasas el valor del primero al segundo.
DoCmd. Close acForm, "PRIMERFORMULARIO"
2.- Si quieres que en cualquiera de los formularios te pida el número de carpeta al abrir, (con la misma variable VbCARPETA declarada en el módulo), escribes en el evento "Al abrir" del formulario donde quieras que lo pida.
VbCARPETA= InputBox ("INDIQUE EL NÚMERO DE CARPETA")
nombrecuadrodetextodelnumerodecarpeta=VbCARPETA.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas