Recorrer registros de un formulario sin abrirlo para actualizar campos que dependen de campos calculados por fecha

Tengo una base de datos de hotel en la cual hay un formulario que guarda la fecha de ingreso (tomada del sistema) y otro campo días hospedado que tiene un cliente. El campo días hospedado tiene origen de control debido a que guardo el dato para futuras consultas.( tengo un campo auxiliar en el cual calculo los días que tiene hospedado el cliente cuyo origen de control es =DifFecha("d",[FECHA DE INGRESO],Fecha())) y hasta aquí todo trabaja bien. Ejemplo Cliente Roberto fecha de ingreso : 30/01/2019 , días hospedado 0. Si mañana 31 de enero consulto el registro tengo asignado en el formulario en el evento al activar registro que Me.DIAShospedado = Me. Campoauxiliar para que días hospedado se actualice a 1 y se almacene en la base de datos. (Solo se actualiza el dato si abro el formulario pues obviamente se tiene asignada la actualización de días hospedado con el campo calculado). ¿Qué puedo hacer para que los días hospedados de cada cliente se actualicen automáticamente sin abrir el formulario e ir cliente por cliente?) Se me ocurre algun proceso que recorra todos los registros de mi formulario automáticamente pero sin abrirlo ya sea desde un botón actualizar o mandar la instrucción desde otro formulario EL PROBLEMA ES QUE NO SE COMO HACERLO. Me podrán ayudar

Respuesta
3

Vamos a poner mis nombre y luego lo adaptas. Vamos a suponer que la tabla se llama Clientes y tiene los campos IdLoquesea, nombrecliente, FechaIngreso y DiasOcupado. Vamos a suponer también que cuando se abre la base se muestra un formulario al que llamaremos Inicial. En sus propiedades-eventos-Al cargar crea un procedimiento de evento y entre Private Sub y End Sub puedes poner

Docmd.setwarnings false

docmd.runsql"update clientes set diasocupado=date()-fechaingreso"

Lo que hace es que cuando vayas a abrir la base y por ende el formulario Inicial, te actualizará los DíasOcupado de la tabla al valor de fecha del sistema menos la fecha en que ingresó.

Si me permites un consejo, no pongas instrucciones en el origen de control de los cuadros de texto, es preferible darle como origen del control un campo y hacer las "operaciones" en código"

¡Gracias!  son muy buenos en esto. les estaré molestando con algunas consultas.

Rosario, si me permites una observación, yo le pondría en la tabla un campo, por ejemplo FechaSalida, que se rellenaría cuando el cliente se fuera(hay mil formas de hacerlo) y entonces la instrucción la dejaría como

docmd.runsql"update clientes set diasocupado=date()-fechaingreso where fechasalida is null"

Me explico, actualiza a la diferencia, sólo aquellos registros en que todavía no se haya ido el cliente, ya que los otros se han marchado. Importante comprueba que hayan pagado antes de irse, que luego tienes que perseguirlos.

Buenas tardes la respuesta de icue fue correcta, me gustaría manejar ahora las horas ocupadas  por cliente retomando este misma pregunta ¿como se le hace para  que las horas hospedadas de cada cliente se actualicen automáticamente sin abrir el formulario e ir cliente por cliente?). Actualmente lo puedo hacer con =DifFecha("h",[HORA DE INGRESO],HoraActual()) pero solo se actualiza al abrir el formulario recibir el enfoque o dar clic. De acuerdo a lo sugerido en la respuesta de icue seria algo similar  en el procedimiento al cargar el formulario docmd.runsql"update clientes set horasocupado=horaactual()-horadeingreso" pero v.b no me reconoce la función horaactual, intente time() pero no me da el mismo valor. Alguna idea o función correcta a utilizar en vb? muchas gracias

Es

docmd.runsql"update clientes set horasocupado=time()-horadeingreso"

Mira, si ahora mismo, las 21:25 aquí, tengo la tabla

Cuando abro el formulario

El código, en este caso es

Private Sub Form_Load()
DoCmd.RunSQL "update [copia de clientes] set horasocupado=time()-horaingreso"
Me.Requery
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas