Guadrar hora de inicio y fin de formulario

Tengo dos formularios uno que es un Menú y otro de relleno de información. Quiero saber como hacer para que cuando pulse el botón del menú que me abre el formulario se guarde la hora de aquel momento preciso como registro en una tabla. De la misma forma cuando pulse el botón de Salir del formulario de relleno de información, que me guarde esa hora como registro en la misma tabla. (A poder ser que la solución sea sin usar VBA)

Respuesta
2

Supongamos que tienes una tabla Registro con... Horaentrada y Horasalida.

Dices que tienes un botón..., pues en el mismo evento que le dices que abre el otro formulario puedes poner

Docmd.setwarnings false

docmd.runsql"insert into registro(horaentrada)values(time())"

Con respecto a lo otro, también me parece que tienes otro botón, pues lo mismo

docmd.setwarnings false

docmd.runsql"update registro set horasalida=time() where horasalida is null"

Me explico, lo de setwarnings es para que aparezca la dichosa ventana de "Va a insertar..." o en el otro caso "Va a actualizar...

En el primer caso le digo que inserte en el campo Horaentrada la hora del sistema. Como estará trabajando en el segundo formulario la hora de salida estará vacía. Por eso le digo que actualize la hora que esta vacía a la hora del sistema.

Muchas gracias Icue!

atengo un problema y es que nunca he usado VBA, los Botones ya tienen asignada una Macro que GuardaRegistro y AbreFormulario. Cómo y donde añado estos DoCmd? tengo que convertir la Macro a VBA? Me podrias explicar el procedimiento a seguir?

Gracias de nuevo!

Ya esta! Ya se como introducirlo y me va de fábula!

Ahora tengo otro problemilla relacionado con esto. Haber si me explico:

Tengo la estructura siguiente, un Menú con dos botones que cada uno te lleva a un formulario distinto pero que rellenan la misma tabla (lo he tenido que hacer con dos formularios para que sea más visual para los operarios). Lo que me gustaría obtener es lo siguiente:

Cuando pulso uno de los botones me lleve a un formulario y me guarde la hora a la que he entrado (horaentrada), al apretar el  botón de salir me tiene que volver al menú inicial, guardarme la hora de salida (horasalida) y que además me guarde esta (horasalida) como (horaentrada) del siguiente registro.

De forma que me quedaran las horas de forma consecutiva, es decir, no quiero que haya saltos entre horas. El tema de abrir, cerrar formularios lo tengo solucionado solo me falta resolver el tema de las horas de entrada y salida

Ej;

Horaentrada           Horasalida

10:00                             10:30

10:30                             10:56

10:56                             11:32

11:32                             13:01

Yo no uso macros. No dejan de ser un trozo de código al que le han puesto un nombre fácil de entender. Cuando haces una macro para abrir un formulario, en realidad le estás diciendo Docmd. Openform"nombredelform". En principio no tienes problema. Cada vez que uses una instrucción insert into siempre será en un registro nuevo. Por ejemplo, vamos a suponer que tienes los formularios Clientes y Operarios, aunque dependan de la misma tabla. En ese botón que abre el primero de los formularios le pones

docmd.setwarnings false

docmd.runsql"insert into tabla(horaentrada)values(time())"

En el botón ese que cierra le pones

docmd.setwarnings false

docmd.runsql"update tabla set horasalida=time() where horasalida isnull"

docmd.runsql"insert into tabla(horaentrada)values(time())"

De todas formas, si ves que no me he explicado bien y quieres, repito, si quieres, mándame una copia vacía de tu base(es para saber como la tienes hecha) a [email protected]. Si lo haces, en el asunto del mensaje pon tu alias Albert, ya que si no sé quien me escribe, ni los abro.

Muchisimas gracias por las respuestas me están ayudando mucho con mi proyecto! 

Me ha salido una duda, ya he resuelto todo el tema de las horas de forma satisfactoria, ahora tengo un problema con guardar los registros. Si recuerdas, tenia un Menú que me daba opción a acceder a dos formularios distintos relacionados con la misma tabla, lo que quiero es que cuando vaya a uno de ellos me guarde la información en una fila de la tabla y cuando vuelva al Menú y entre a cualquiera de los dos formularios, que me lo guarde en el registro siguiente, lo que me pasa ahora es que se me rellena todo en la misma fila:

(en el ejemplo las letras de A a G representan los campos, la X los registros que entro en un formulario y la Y los registros que entro en el otro formulario)

Ej:

A     B     C     D     E     F     G

X             X     X     X     X     X

        Y

X             X     X     X     X     X

        Y

        Y

...

El problema que tengo actualmente es que la información Y se me pondría en la misma fila de las X.

Nota: efectivamente, el formulario con información Y sólo rellena un dato (pero lo necesito así para que me entiendan los operarios)

Puedes hacerlo de muchas formas, pero siento tener que decírtelo en código, ya que no uso macros

1º En los botones que usas para abrir los formularios puedes poner

DoCmd. OpenForm "clientes",,,, acFormAdd

Es decir que te abra el formulario en un registro nuevo

2º En el evento Al abrir de cada formulario poner

Docmd. Gotorecord,, acnewrec

Que hace lo mismo

3º En las propiedades de los formulario, en la solapa Datos-Entrada de datos le pones Sí, que tambien hace exactamente lo mismo.

No me hace exactamente lo que yo quiero, ya que con la orden

"docmd.runsql"insert into tabla(horaentrada)values(time())""

ya estoy insertando un nuevo registro y quiero que se me inserte en este, pero si además pongo el "Docmd. Gotorecord,, acnewrec"

se me crea otro registro más además del creado previamente con el runsql.

He provado con el

  "Docmd. Gotorecord,, acLast"

y lo que me pasa es que al apretar el Botón de abrir el formulario, efectivamente se va al último registro pero cuando introduzco los datos en el formulario y vuelvo al menu principal, me registra los datos en el registro anterior, donde ya tenia datos.. No entiendo por qué..

Vamos a ver, ¿qué tiene que ver una tabla con otra? Una cosa es la tabla registro y otra la tabla Clientes. Al menos es lo que he supuesto. Si tengo una tabla Clientes como la de la imagen

Y tengo un formulario Menú

Si pulso el botón de arriba

Y relleno sólo los cuadros coloreados( el de ciudad no tiene porque estar pero me resulta más cómodo copiar y pegar) y cierro el formulario y luego en el formulario Menú pulso el botón de abajo, se abre el otro

Y cierro el formulario, la tabla Clientes me queda con valores en registros distintos

Y lo único que le digo en los eventos Al hacer clic de los botones del formulario menú es

DoCmd. OpenForm "clientes",,,, acFormAdd

DoCmd. OpenForm "otroform",,,, acFormAdd

Que es lo que preguntabas en lo de las X e Y.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas