Todoexpertos.com
http://www.todoexpertos.com
La respuesta está en Internet
Información de la pregunta
Título: Crear campo numérico que reinicie al cambiar de año
Experto: marciana
Valoración: 5
Fecha: 22/11/2007


Crear campo numérico que reinicie al cambiar de año
Buenas tardes, Marciana, tengo que hacer una base de datos de correspondencia que tenga un campo contador (pero no autonumérico) que se reinicie al cambiar el año. Por favor, explícame muy detalladamente cada paso que soy principiante en el VBA y con las indicaciones que he encontrado en internet no he sido capaz de sacarlo sola. Un saludo, y muchas gracias por anticipado, María

Re: Crear campo numérico que reinicie al cambiar de añ
Hola María Contá con mi ayuda con todo gusto. Te cuento que es más fácil ayudarte y llegar rápido a una solución cuando se explica bien el problema. Me ha sucedido que después de 5 o 6 cambios de mensajes recién he podido comprender el problema. Ahora tu consulta. Hay muchas formas de hacerlo. Lo primero que se me ocurre es guardar el año en una tabla. Yo suelo usar una tabla Parametros (ya que sos nueva, te recomiendo que no uses acentos, ni eñes en nombre de tablas y campos) donde guardo información de ese tipo. Entonces, la segunda cosa sería hacer una macro que se ejecute cada vez que se abre la base y que compare la fecha actual (la del sistema en que está corriendo) con el dato guardado en Parametros, si el año ha cambiado entonces reiniciará el contador. Fijate si hasta acá estoy entendiendo bien. Si es así sería bueno que me explicaras prolijamente lo que hace la aplicación con que estás trabajando. Una cosa que se me ocurrió es si reiniciar el contador no generará conflictos de duplicación. En caso de que esta solución te convenga yo te escribiría la función que debería ejecutar la macro para realizar el chequeo de año y en el caso de que haya cambiado realice el cambio. Espero tu respuesta, cordialmente, Marciana

Crear campo numérico que reinicie al cambiar de año
Te cuento más concretamente: tengo una base de datos que tiene los siguientes campos: Codigo (que es el campo contador, se puede duplicar años distintos) Fecha de envio Fecha de respuesta Remitente Asunto Destinatario La finalidad que quiero conseguier es que el campo CODIGO se genere automáticamente al hacer un nuevo registro y que reinicie la cuenta de cartas recibidas al comenzar un nuevo año. Es decir, si en 2007 llevo 45 cartas el CODIGO sería 0045. Si la primera carta recibida en 2008 es el 12 de enero de 2008 su CODIGO sería 0001 (aunque hubiera habido dicho codigo en la primera carta recibida en 2007). Me he explicado o lo he liado demasiado. Muchas gracias por ser tan rápida y por tu dedicación a mi inexperiencia. Un saludo, María

Re: Crear campo numérico que reinicie al cambiar de añ
Muy clara tu explicación, María. No se cuanto se ha desarrollado el sistema. ¿Hay un formulario donde das de alta una nueva carta? Si es así yo agregaría a ese formulario el siguiente código. Private Sub Form_BeforeInsert(Cancel As Integer) Dim UltimaCuenta As Long UltimaCuenta = DMax("Cuenta", "Cartas") Cuenta = UltimaCuenta + 1 SendKeys "{F9}" End Sub Yo lo probé y funciona perfecto. supuse que la tabla se llama "Cartas" Con esto solamente se incrementa el contador al agregar un nuevo registro. Para probarlo tenés que escribir algo en alguno de los datos del nuevo registro. Apenas comiences a hacerlo te colocará el número. Se me está ocurriendo una forma sencilla de solucionar todo. Necesito que me digas si esta prueba funcionó. Cordialmente, Marciana

Crear campo numérico que reinicie al cambiar de año
Buenas tardes, Marciana: La prueba ha funcionado a la perfección. Muchísimas gracias. Ya sólo falta reiniciar al cambiar de año. Agradeciéndote tu esfuerzo, te envío un saludo, María.

Re: Crear campo numérico que reinicie al cambiar de añ
María Si necesitás ayuda para reiniciar el contador, decimelo. Cordialmente, Marciana

Re: Crear campo numérico que reinicie al cambiar de añ
María Ahora vamos a resolver lo de reiniciar el contador. Cordialmente, Marciana

Re: Crear campo numérico que reinicie al cambiar de añ
Esto resuelve, pero hay un problema que me apareció después. Para resolver todo bien hay que hacer lo siguiente: 1) Crear una tabla Parametros que tenga un solo campo "Anio" de tipo Long 2) A la tabla Cartas agregar un campo Anio de tipo long que tenga valor predeterminado =year(Date()) 3)Agregar en el formulario cartas el siguiente código: Public Function VerificaAnio() Dim rst As New ADODB.Recordset Dim AnioActual As Integer Dim UltimaCuenta As Long rst.Open "Parametros", CurrentProject.Connection, adOpenDynamic, adLockOptimistic rst.MoveFirst AnioActual = Year(Date) If rst("Anio") = AnioActual Then UltimaCuenta = Nz(DMax("Cuenta", "Cartas", "Anio = " & AnioActual), 0) VerificaAnio = UltimaCuenta + 1 Else rst("Anio") = AnioActual rst.Update VerificaAnio = 1 End If rst.Close End Function Private Sub Form_BeforeInsert(Cancel As Integer) Cuenta = VerificaAnio() SendKeys "{F9}" End Sub Contame como te fue. Cordialmente, Marciana

Crear campo numérico que reinicie al cambiar de año
Marciana, disculpa que te moleste de nuevo con el mismo asunto, pero es que me marca en amarillo Private Sub Form_Before Insert y en azul Cuenta indicando "no se ha definido la variable". No sé qué es lo que he hecho más. Me puedes orientar, por favor. Muchas gracias por tu ayuda y paciencia. Un saludo, María

Re: Crear campo numérico que reinicie al cambiar de añ
Hola María Te sugiero lo siguiente: 1) Verificar que la tabla "Carta" tenga un campo que se llama "Cuenta", y un campo "Anio". Si los nombres no coinciden deberás hacer los cambios correspondientes. 2)Creá un formulario nuevo de tipo columna con la tabla Carta 3) Poné el formulario del paso 2 en modo diseño y en la ventana código de ese formulario pegá el último código que te envié. 4) Verificá que tenés la tabla "Parametros" con el campo "Anio" y que tiene como dato 2007. Yo tengo hecha una base con esta solución y funciona bien. Una vez que funcione esta parte tengo alguna sugerencia que hacerte para hacer pruebas y mejorar el funcionamiento. Espero tu respuesta, Marciana

RE: Crear campo numérico
Buenos días, Marciana, Ha funcionado a la perfección. El problema es que, al inicio del código me salía predeterminado "option Explcit" y no funcionaba, pero funciona perfecto. Muchísimas gracias por tu ayuda. Espero tus noticias para las mejoras que me has comentado. Gracias de nuevo. Un saludo, María D.

Re: Crear campo numérico que reinicie al cambiar de añ
Hola María Me alegro mucho que todo funcione bien. La Opción "Option Explicit" es muy importante, se activa desde Herramientas/Opciones y su activación te obliga a declarar todas las variables. Esto contribuye a mejorar la calidad del código y a evitar errores. En el formulario donde actualizás Cartas te sugiero que el control "Cuenta" abras sus propiedades (hay un botón Propiedades en la barra de herramientas, tenés que tener seleccionado el control) En la ficha "Otras" (lo digo de memoria, me puedo equivocar) elige la opción "Punto de tabulación" en No. esto hace que cuando se activa el formulario el cursor no se posiciones en el control Cuenta porque este se debe actualizar automáticamente. Es más en la ficha "Datos" (otra vez de memoria) también en Propiedades, elegí la opción "Bloqueado" en Sí. Esto hace que el usuario no la modifique inadvertidamente. Ha sido muy agradable dialogar contigo. Marciana

Pregunta finalizada. Valoración: 5
Muchísimas gracias por todo, Marciana. Me has ayudado muchísimo, con paciencia y con una gran profesionalidad. Te agradezco muchísimo todo tu esfuerzo. Un saludo


Volver al mensaje
http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/1738789/crear-campo-numerico-que-reinicie-al-cambiar-de-ano