Trabajando con campos calculados en formulario que necesito ver en informe.

Tengo una BD en Access. En un formulario de nombre Ficha del Cliente tengo varios campos para rgistrar los datos del cliente. Uno de esos campos es el CI (carné de identidad que es un código como este: 73012910442). A este formulario se le añadió un campo de nombre FechaNacimiento donde se calcula a través de código vba la fecha de nacimiento a partir del campon CI lo que daría en este caso por ejemplo: 29 de enero de 1973. Añadí otro campo de nombre Edad que igual calcula con vba y da como resultado: 51. Además se añade otro campo donde se define si es F o M (femenino o masculino) en dependencia de si CI termina en número par o impar. Todo esto funciona bien. Ahora tengo un problema; como estos tres campos no tienen origen en la tabla de nombre FichaCliente, sino que se crean y calculan en el formulario cuando quiero hacer el informe a partir de la tabla no puedo ver estos 3 campos. ¿Alguna solución?

2 Respuestas

Respuesta
1

Para incluir los campos calculados (Fecha de Nacimiento, Edad, y Género) en un informe en Access, puede hacerlo utilizando una consulta que calcule estos valores a partir del campo CI. A continuación, te explico los pasos para lograrlo:

Paso 1: Crear una Consulta

Crea una consulta que incluya todos los campos que necesitas para el informe.
Agrega la tabla FichaCliente en la consulta.
Añade los campos que quieres incluir en el informe (incluyendo CI).
En la consulta, crea campos calculados para FechaNacimiento, Edad, y Género.

Paso 2: Crear Campos Calculados en la Consulta

Para Fecha de Nacimiento a partir del CI, utiliza una expresión calculada. Por ejemplo:

FechaNacimiento: DateSerial(Left([CI], 2), Mid([CI], 3, 2), Mid([CI], 5, 2))

Esto asume que el CI está en el formato AAMMDD#### (donde AA son los últimos dos dígitos del año, MM es el mes y DD es el día).

Para Edad, puede utilizar una función calculada basada en la FechaNacimiento. Por ejemplo:

Edad: DateDiff("yyyy", DateSerial(Left([CI], 2), Mid([CI], 3, 2), Mid([CI], 5, 2)), Date()) - IIf(Format(Date(), "mmdd") < Format(DateSerial(Left([CI], 2), Mid([CI], 3, 2), Mid([CI], 5, 2)), "mmdd"), 1, 0)

Aquí, DateDiff("yyyy", ...) calcula la diferencia de años, y el ajuste al final (- IIf(...)) se usa para corregir si aún no ha cumplido años este año.

Para Género, useuna expresión que determine si el último dígito del CI es par o impar:

Género: IIf(Right([CI], 1) Mod 2 = 0, "F", "M")

Paso 3: Crear el Informe Basado en la Consulta

Una vez que la consulta está lista con todos los campos (incluyendo los calculados), guarde la consulta.
Cree el informe utilizando la consulta como origen de datos en lugar de la tabla FichaCliente.
Al crear un nuevo informe, selecciona la consulta que acaba de crear como fuente de datos.

Alternativa: Usar VBA Directamente en el Informe

Otra opción es calcular estos valores directamente en el informe utilizando VBA, pero esto requiere agregar código a eventos del informe, lo que puede ser más complejo. La opción con la consulta e

Respuesta
1

Alexis, por curiosidad. Supongamos que tengo un CI = 190722... Sabemos que nació un 22 de Julio, pero ¿ de que año? 1919 o 2019 y no me digas que no hay gente de 105 años, porque espero que vivamos muchos más ( al menos 240).

Muy buena pregunta: Si conservas todavía el archivo de la BD que te mandé la semana pasada, en el formulario PacientesDatos (o desde el menú inicio en el botón Pacientes) verás el campo CI y como funciona y todo el código vba que tiene detrás de cada campo. Estoy de acuerdo contigo y me pregunto ¿cómo hago con alguien nacido en 1919?

Te respondo por email.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas