Rellenar campo de formulario con condiciones en access

He construido una base de datos entre los que se encuentra una tabla que contiene con los siguientes datos (entre otros)

Fecha de entrada; fecha de salida; tiempoestancia y quiero que en un campo que se llama puntosfidelizacion se rellene con las siguientes condiciones:

Si ha estado 2 días :1 punto

Si ha estado 2 o más y menos de 5 :2 puntos

Si ha estado 5 o másy menos de 10: 3 puntos

Si ha estado 10 o más y menos de 15: 5 puntos

Si ha estado 15 días o más: 10 puntos

He creado un formulario con estos campos.

Lo estoy intentando a través de un código pero soy muy novato y no lo consigo

También lo he intentado con macros pero me da error de que no encuentra el formulario que le indico y no hay manera... He visto 200.000 mil tutoriales y hago lo mismo pero no hay manera...

1 respuesta

Respuesta
1

Primero, tienes un error cuando dices "si ha estado dos días 1 punto, y en la siguiente línea le dices si ha estado dos días o mas" Las dos condiciones son iguales. O le dices a la primera si ha estado dos días, a la segunda tienes que decirle, si ha estado más de dos días

Si tengo el formulario, en el evento Después de actualizar del cuadro de texto FechaSalida le digo

Private Sub FechaSalida_AfterUpdate()
If DateDiff("d", FechaEntrada, FechaSalida) < 2 Then
Puntos = 1
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 2 And DateDiff("d", FechaEntrada, FechaSalida) < 5 Then
Puntos = 2
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 5 And DateDiff("d", FechaEntrada, FechaSalida) < 10 Then
Puntos = 3
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 10 And DateDiff("d", FechaEntrada, FechaSalida) < 15 Then
Puntos = 5
Else
Puntos = 15
End If
End Sub

Me queda

En otro orden de cosas. ¿Cómo andáis por ahí con la pandemia?

Si el formulario Compras estuviera abierto, al final de ambas instrucciones tendrías que poner

Forms! Compras. Requery

Muchas gracias Julián... ha funcionado perfectamente. Eres un máquina pero no entiendo lo que me has enviado de Forms! Compras. Requery

Una última pregunta. Ya tenía la tabla creada con el las fechas de entrada y salida ¿se puede rellenar el camo de puntos automáticamente con los datos que tengo? ¿Con el código que me has mandado se que es al introducri la fecha de salida pero sería posible si ya la tengo que la cogiera?

Y en relación con el Corona... como toda España... en casa pero por suerte bien

Sergio, tienes que perdonarme, pero te puse algo, lo de compras y me. Requery que era para otra persona. Lo que no sé es lo que le habré puesto a él.

Puedes hacerlo con Do while... pero creo que es más didáctico crear un botón en el encabezado del formulario(da igual que sea único o continuo) y poner, en el evento Al hacer clic del botón

dim i as integer

docmd.gotorecord,,acfirst

for i= 1 to me.recordset.recordcount

dim i as integer
docmd.gotorecord,,acfirst
for i=1 to me.recordset.recordcount
If DateDiff("d", FechaEntrada, FechaSalida) < 2 Then
Puntos = 1
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 2 And DateDiff("d", FechaEntrada, FechaSalida) < 5 Then
Puntos = 2
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 5 And DateDiff("d", FechaEntrada, FechaSalida) < 10 Then
Puntos = 3
ElseIf DateDiff("d", FechaEntrada, FechaSalida) >= 10 And DateDiff("d", FechaEntrada, FechaSalida) < 15 Then
Puntos = 5
Else
Puntos = 15
End If
docmd.gotorecord,,acnext
next
Docmd. Gotorecord,, acfirst

Me explico. Al pulsar el botón, primero define la variable i (si tuvieras más de 32.000 registros tendrías que definirla como long)como un número entero. Luego se va al primer registro y comprueba que condición cumple y en función de ella le asigna su valor al control Puntos. Se va al siguiente registro, lo mismo, etc hasta el último registro, definido por me. Recordset. Recordcount o para ser "más vulgares", la cuenta de registros del formulario. Cuando ha llegado abajo, se vuelve al primer registro.

¡Gracias! Muchas gracias... me voy a poner con ello. Solamente de pensar que tendría que picar todos las datos que ya tenía en fecha salida me daba un mal.

Un saludo fuerte y a seguir luchando contra el corona...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas