Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/01/2008, 02:59
Avatar de Taribo007
Taribo007
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Re: Como planteariais el control de asistencia a clase a rellenar por los profes? Acc

Vale, empecemos por el principio. Si miras las propiedades de cualquier formulario, veras que tiene una pestaña que se llama eventos. Hay tienes todos los eventos que se pueden producir en un formulario. Uno de los que se producen al abrir un form (doble click sober el), es el evento load (al cargar). Tambien se produce el evento open (al abrir) y el evento current (al activar registro). Podrias hacerlo en cualquiera de los dos primeros. Si situas el cursor sobre la linea (seguimos en las propiedades del form pestaña eventos) que dice "Al cargar", veras que al final de esta hay una especie de botoncito con tres punto (...). Si pulsas ese boton, te sale una ventanieta ms pequeña que dice "Generar evento", si en la lista que sale pulsas "De codigo", se te abre la ventana de VBA con la estructura del evento form_load.

Dcount es una funcion agregada de dominio. Si buscas en la ayuda de access "Funciones agregadas de dominio" te saldran algunas mas (Dlookup,DMax, Dmin...), y veras que coinciden con las funciones de agregado de SQL. Es una herramienta muy util de access y que en cuanto la conozcas y uses dos veces no podras de jar de utilizar. Basicamente es una funcion a la que le pasas 3 argumento y devulve un resultado. El primer argumento es el campo de la tabla (en este caso * por que no buscamos un campo en concreto), el segundo el nombre de la tabla y el tercero una condicion (lo que seria la clusula where de una sentenbcia SQL). Dcount lo que hace es contar registros. Por lo tanto en este caso Dcount devolvera el numero de registros de la tabla Asistencias que cumplen la condicion.
Analicemos el tercer parametro de la funcion:

"Fecha=#" & Format(Date, "mm/dd/yyyy") & "#"

Es la condicion where. Fecha, es el campo de la tabla. Para construir sentencias condicionales en access, para fechas se usa #, para campos de texto comillas simples ('), y para campos de tipo numerico nada. Lo que nos da la fecha del sistema es la funcion Date(). Si quisieramos la fecha y la hora uasriamo Now() y solo la hora usariamos Time(). En este caso, para construir criterios con fechas yo siempre le doy formato americano (para eso usamos la funcion format) ya que acces internamente trabaja con este formato, asi intento evitar posibles errores. El & es el caracter concatenador de cadenas de acces. Por lo tanto lo que hacemos realmente es generar una cadena de texto con la condicion. Para aclarar mas, si en lugar de contar los registros con la fecha actual, quisieramos contar los registro de la tabla Alumnos con nombre =Andres, hariamos:

msgbox Dcount("*","Alumnos","Nombre='Andres'")

Y si Andres lo puesieramos en un cuadro de texto de un form llamado TxtNombe, habria que contruir la cadena asi:

msgbox Dcount("*","Alumnos","Nombre='" & me.TxtNombre & "'")

Vale, pasamos a los siguiente. Si no hay registros para la fecha actual, ejecutamos una consulta sql de inserccion. Aqui tienes el mejor manual de SQL para el motor Jet que usa access:

http://www.mvp-access.com/softjaen/m...sjtsqlj001.htm

Pero basicamente, si sigues la sentencia es: Insertame en la tabla Asitencias, en los campos Fecha e IdAlumno, el resultado de la sentencia siguiente: seleccioname los campos IdAlumno de la tabla alumnos, sentencia a la que añadimos la fecha actual (similar a la explicacion anterior). Asi insertamos un registro con la fecha actual por cada alumno que haya en la tabla.

No se si te he aclardo algo o te he liado mas. En cuanto tenga un momento me bajo tu BD a ver como va.

Un saludito