Añadir meses a una fecha

Lo primero, decir que soy totalmente novato y profano en la materia... No tengo ni idea de access, y me han embarcado en el trabajo en una pequeña aventura, así que agradeceré toda aclaración sobre conceptos que, seguramente, todos conocéis mejor que yo.
El caso es que estamos elaborando una pequeña base de datos para llevar un registro de clientes. En nuestra tabla hemos introducido tres columnas:
1.- Fecha de alta --> Formato de fecha (por ejemplo, 15/02/2009)
2.- Número de cargas contratadas --> Formato de número (por ejemplo, 3)
3.- Fecha de fin de licencia --> Aquí está el problema. El cliente tiene derecho a cuatro meses por cada carga que contrate. Por ello, queremos que al introducir el valor en "Fecha de alta" y el "Número de cargas contratadas", la celda correspondiente en la columna "Fecha de fin de licencia" se complete sola.
He estado probando con alguna expresión. Por ejemplo, he escrito en "Valor predeterminado" la expresión
AgregFecha("m"; "4*[Número de cargas contratadas]"; "[Fecha de alta]")
Pero la cosa debe estar fatal porque no hay manera.

1 Respuesta

Respuesta
1
Yo utilizaría una función en VBA que, en cada cambio de alguno de los dos controles, recalcule ese otro campo. La función en el mismo módulo del formulario.
Private Function CalculaFechaFin()
  If Not IsDate(Me![Fecha de alta]) Or Not IsNumeric(Me![Número de cargas contratadas]) Then
    ' no hay datos para hacer el cálculo: salimos
    Exit Function
  End If
  ' tenemos datos: vamos a calcular
  Me![Fecha de fin de licencia] = DateAdd("m", Me![Número de cargas contratadas]*4, Me![Fecha de alta])
End Function
Después, en la hoja de propiedades de los 2 controles implicados (Fecha de alta y Numero de cargas contratadas) y en la propiedad Después de actualizar, escribes directamente:
=CalculaFechaFin()
Eso debería funcionar.
Ahora un consejo (gratis, je je): evita, en la medida de lo posible, el uso de espacios, caracteres especiales, acentos, etc en los nombres de controles, campos y objetos; a la larga te evitaras problemas. Se entiende igual Fecha de fin de licencia que FechaFinLicencia con la ventaja que la segunda forma no requiere corchetes ni, en determinados sitios, guiones bajos. Tampoco poner acentos esta muy recomendado: ningún corrector ortográfico se 'chivará' ni creo que los de la real academia de la lengua se quejen demasiado. Es solo un consejo de alguien que ya pasó por eso hace bastantes años...
Hola de nuevo!
Antes de nada, muchísimas gracias por la información. Creo que he hecho todo lo que me has comentado, pero por si acaso, te explico...
Con mi tabla creada, me he ido a crear un formulario. En el formulario he añadido todos los campos que quería que aparecieran, entre ellos, estos tres. Mi primer problema ha surgido con esto de "La función en el mismo módulo del formulario"... ¿dónde tengo que escribir exactamente esa función? Lo que he hecho ha sido irme a "Módulos" y crear uno nuevo en el que he copiapegado, tal cual, el texto que me has puesto.
Después, he ido a las propiedades de Fecha de Alta (a la que he renombrado como Alta) y Número de cargas contratadas (a la que he renombrado CargContratadas) y he añadido la línea que me has dicho en Después de actualizar.
Sin embargo, cuando voy a escribir cualquier valor en el formulario, me aparece este mensaje:
La expresión 'Después de actualizar' que introdujo como valor de la propiedad de evento produjo un error: El procedimiento externo no es válido.
¿Alguna idea, o lo doy por perdido?
Mil gracias, una vez más!
No, lo que ocurre es que lo has copiado en un módulo independiente. Debes copiarlo en el mismo módulo del propio formulario.
La forma más simple de acceder a ese módulo es, con el formulario en modo diseño, buscar un botón que te lleva al código de ese objeto. En función de la versión está en un sitio u otro.
En la version 2007, aparece en la pestaña Diseño del Ribbon, en el bloque Herramientas, arriba a la derecha de todo. Al situarte encima aparece el tip 'Ver código'
En versiones anteriores existe un botón en la barra de herramientas o también creo que puedes acceder mediante el menú Ver / Código.
Otra forma es acceder al editor VBA (Alt + F11), abrir (si no lo está ya) el explorador de proyectos (Menú Ver / Explorador de proyectos o Ctrl+R) y hacer doble clic en el formulario dónde quieres meter el código.
Una anotación más: si cambiaras la declaración Private por Public, la función seria visible en toda la aplicación, pero 'cascaria' al llegar a la primera linea que contuviera la referencia Me!, ya que eso hace referencia al formulario dónde se ejecuta el código. Al estar el código en un módulo independiente, esa referencia no es válida... aunque se me ocurre que puedes 'universalizarla' por si necesitas el mismo código en otro sitio:
Public Function CalculaFechaFin()
  Dim frm As Form
  Set frm = Screen.ActiveForm

  If Not IsDate(frm![Fecha de alta]) Or Not IsNumeric(frm![Número de cargas contratadas]) Then
    ' no hay datos para hacer el cálculo: salimos
    Exit Function
  End If
  ' tenemos datos: vamos a calcular
  frm![Fecha de fin de licencia] = DateAdd("m", frm![Número de cargas contratadas]*4, frm![Fecha de alta])
End Function
Esto que voy a decir es con todo el respeto del mundo (a veces es muy difícil dar la entonación correcta al escribir)
No se si quieres seguir con Access después de esta 'aventura' o solo sacártela de encima.
Si es el primero de los casos, no te limites a copiar y pegar: estudia las lineas que te he puesto y el porqué. Una forma de hacerlo es seleccionando una palabra (IsDate por ejemplo) y pulsar F1.
Si es el segundo... pues poco que decir; solo que tengas en cuenta que, cualquier cosa que hagas, aunque no la entiendas mucho, la dejes bien comentada para el que venga 'detras' el día de mañana.
Como te decía: con todo el respeto del mundo. Para mi, cualquiera que se meta a programar lo merece.
Un saludo, tocayo.
http://www.mvp-access.com/foro --> el mejor foro de Access en español
http://www.aesoft-databases.com
¡Gracias mil!
Funciona a la perfección. Me dejaré de eufemismos como "te debo la vida", pero, si en alguna ocasión nos cruzamos, ten por seguro que al menos un café tendrás de mi cuenta. Respecto a tu pregunta, la historia es larga... comencé la carrera de matemáticas + informática (me apasiona el mundo tecnológico, y la programación en concreto), empecé mis tonteos con C++, pero por devenires de la fortuna, pasé, al segundo año, a cursar Filología. Y, bendita ironía, aquí me hallo, aplicando cuestiones científicas a labores puramente lingüísticas. En el fondo, las disciplinas no están tan lejos, parece...
Ya he estudiado con calma las líneas, y más o menos, comprendo el significado, pero mi camino es aún largo. Probablemente vuelvas a verme por aquí =) De nuevo, mi más profundo agradecimiento.
Javier

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas