Pregunta de access avanzado

Tengo varias preguntas que me han surgido, quizá sean una bobada pero estoy tratándolas de resolver a altas horas de la noche..
1) Estoy metiendo los campos de una base de datos, en uno de los campos me pide que cuando vaya a rellenarlo no admita clientes menores de edad. Yo he aplicado una regla de validación que no se si por no estar bien escrita no hay manera de que funcione.
El nombre del campo se llama FECHANAC, yo en regla DE VALIDACIÓN pongo:
(Ahora()-[FECHANAC])>18, TAMBIÉN HE INTENTADO CON fecha() en lugar de ahora(), pero me sale un error (manejo la version 2003) y no consigo sacarlo y lo peor de todo es que es para un examen. Al final me ha salido con la funion diffecha(), pero quería saber un método más sencillo que no incluya funciones.
2) Por otro lado, en el campo "estado civil", me sugieren que sea numérico byte y que ponga 1:SOLTERO 2:CASADO; 3 :SEPARADO y que cree un campo combinado y que además cuando haya hecho esto se me visualicen los estados en letras, me imagino es, c, sep, etc.
He tratado de usar la opción "buscar" y a continuación seleccionar una tabla que he fabricado para este evento pero no hay manera que el desplegable me efectúe la selección, del estilo a como lo hago en excel con la función "BUSCARV". Esto lo que conseguido poner con un cuadro combinado, pero no se si habrá una manera más sencilla.
3) Por ultimo en una tabla me piden que la "fecha de regreso" la valide y sea menor que la "fecha de salida", lo he hecho como el punto 1
[fecharegreso]<=[fechasalida] y sigue sin funcionarme, me da la sensación que es por las sintaxis, es que el generador de expresiones no le controlo mucho.
Agracedería cualquier ayuda, me estoy volviendo loco y lo necesito para dentro de unos días.
4) tambien que me ponga si=hombre no= mujer dentro de un campo de tipo si/no
Sobre todo me interesa el punto 3)
Muchas gracias

2 respuestas

Respuesta
1
Vamos por pasos.
La si restas dos fechas obtienes los días transcurridos entre ellas, no los años. Para calcular la edad o usas la función datediff o te creas tu una nueva en los módulos.
La forma que has puesto en la regla de validación me parece correcta.
Para que un campo numérico de tipo 'byte' te guarde los valores que quieres puedes hacer lo siguiente:
- Crear el campo numérico - byte.
- En la pestaña 'Búsqueda pones' lo siguiente:
Mostrar control: cuadro de lista
Tipo de origen de la fila: lista de valores
origen de la fila: 1;"Soltero";2;"Casado";3;"Separado"
Columna dependiente: 1
Número de columnas: 2
Encabezado de columnas: no
Ancho de columnas: 0 cm;10 cm
Aunque vas a ver los valores Soltero y Casado, internamente almacenará 1 y 2. Puedes demostrarlo haciendo una consulta sobre la tabla y sumando 1 al valor del campo.
Sobre el punto 3... no sé decirte ninguna forma de poner en la tabla una regla de validación para que un campo tenga un valor dependiente de otro. Sólo se me ocurre cómo hacerlo a través de programación, pero no en la definición de la tabla.
El punto 4 puedes resolverlo poniendo el formato "Mujer";"Hombre" y en búsqueda - mostrar control: Cuadro de texto.
Los puntos 3) y 4) son los que más me interesan, los anteriores me han funcionado como e has dicho.
3) No consigo poner ninguna regla de validación efectiva, tipo <("FECHASALIDA") o <[fechasalida], sin la necesidad de programar
4) Había pensado en un cuadro combinado, ya que lo que quiero es que me salga si=hombre no= mujer, pero que se me almacene como quiera el access.
La version que me has dado no me funciona, le tengo que poner físicamente un 0 o un 1, no se me despliega nada.
Si me puedes ayudar te lo agradecería.
Un saludo y gracias
Respecto al punto 3 dudo muchísimo que se pueda poner una regla de validación de un campo dependiente del valor de otro campo de la misma tabla.
No parece lógico ya que mientras se está grabando el registro habrá momentos en los que se incumpla la condición (p.e.: Cuando no tengamos nada en la segunda fecha).
Lo normal es que se validen los datos en el momento de insertar todo el registro, por lo que habría que hacerlo por programa.
Respecto al punto 4 podrías poner en el origen de la fila: Sí;"Hombre";No;"Mujer".
Respuesta
1. El resultado de la expresión que has puesto serán días... y tu buscas años. DifFecha es una función adecuada.
2. Tan simple como, en el diseño de la tabla, seleccionar bien el control que utilizaras para visualizar y configurarlo correctamente.
3. Creo que no necesitas poner las dos condiciones de la comparación
4. No lo entiendo, aunqie sospecho que un if condicional podría ser una solución.
Por cierto... las preguntas no te 'han surgido'... es un examen.
Aunque tampoco has aportado los datos necesarios para una respuesta más ajustada: no indicas si esas validaciones deben ser a nivel de tabla o de formulario; pueden ser mucho más elaboradas y 'curiosas' en un formulario, por ejemplo.
Pero, de todas maneras, darte la solución masticada y que no entiendas nada seria perder el tiempo (el tuyo y el mio). Prefiero sólo indicarte y a ver si lo entiendes por tus medios.
Xavi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas