Combobox no muestra valor al abrir formulario

Después de buscar por todos lados he visto respuestas pero ninguna resolvía mi problema. El caso es que tengo un formulario con un combo que muestra los nombres de unos supervisores leyendo de una tabla (t_supervisores) para añadirlo a otra (t_supervisiones) en cada una de las supervisiones. El problema es que había establecido en la tabla t_supervisores un campo sí/no para activar o desactivar a los mismos y me encuentro con el problema que al desactivar alguno de ellos, en el formulario que lee el combo no muestra los desactivados que habían hecho supervisiones y me deja éstas cómo si no hubieran tenido supervisor, aunque en la tabla sí está el campo clave incluido. El origen de fila del combo lo establecí con "Select t_supervisores.id, t_supervisores.nombre from t_supervisores where t_supervisores.activo = true". ¿Habría alguna manera de que me siguiera mostrando el nombre aunque ya no estén disponibles para futuras supervisiones?

1 Respuesta

Respuesta
2

No sé como querrías hacerlo, por eso, si tengo una tabla Supervisores con ese campo Si/No que dices

Y otra tabla Obras como

Con esta última hago un formulario, lo pongo continuo porque se ve mejor.

Vamos a suponer que elijo Luis, que en ese momento no está ocupado(ni nunca porque no pega palo al agua). En el siguiente registro

El origen de la fila del combinado es

SELECT Nombre, Ocupado FROM Supervisores GROUP BY Nombre, Ocupado; 

Y el código del evento Después de actualizar del combinado

Private Sub Supervisor_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "update supervisores set ocupado=-1 where nombre='" & Me.Supervisor & "'"
Supervisor.Requery
End Sub

Esto podrías completarlo con algo de código que evite que elijas a algún supervisor que ya está ocupado(lo que se llama acoso laboral, mientras que Luis sigue tocándose los ...) por ejemplo

If supervisor.column(1)=-1 then

...

Hola Icue, primero gracias por la respuesta, pero hay una cosa que quizá no he explicado bien, el problema es que activo significa con posibilidad o no de elegirlo en el futuro, pero no quiero que se pierda el histórico de lo realizado por él. O sea, que los registros que el usuario supervisó se queden con su valor y que luego no aparezca más al pulsar el combo, no sé si es posible hacerlo, pero era mi idea.

¿Podrías poner una imagen de cada tabla? Ponle unos valores inventados para que me haga una idea, porque, honestamente, no lo entiendo.

Hola de nuevo Icue, a ver si con imágenes soy capaz de mostrarte bien el asunto, ten en cuenta que en la tabla que te muestro son verificadores en vez de supervisores.

Espero que con las imágenes entiendas mejor mi problema!!

Gracias de antemano de nuevo por tu ayuda!

Vamos a suponer que tengo la tabla Verificadores, y que en ese momento están todos tocándose los...(momento ideal para despedirlos)

De Pepito podía esperarlo, pero de Antonio. ¡ Que verguenza!

En el formulario, elijo un area, pongo sí o no y en usuario me olvido del campo Activo, en su origen de la fila pongo simplemente

SELECT Usuario FROM Verificadores GROUP BY Usuario;

Al alegir a uno

La tabla Verificadores me la deja como

Sigo insistiendo con lo del despido

Si en el formulario, en cualquier registro volviera a seleccionar a ese usuario que, se supone, estaba trabajando

Me avisa de que te había dicho que estaba trabajando. Si le dices que sí, aunque no lo veas, en la tabla Verificadores te lo marca como parado, te guarda el valor en el campo correspondiente, lo vuelve a marcar como activo

Y la tabla verificaciones contiene todo el historial del trabajo de José

Claro que yo le pondría un par de campos Fecha Ini y Fecha Fin, para saber realmente(por lo del despido) el tiempo que ha estado currando.

El código del combinado es

Private Sub Usuario_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "update verificadores set activo=-1 where usuario ='" & Me.Usuario & "'"
End Sub
Private Sub Usuario_BeforeUpdate(Cancel As Integer)
If DLookup("activo", "verificadores", "usuario='" & Me.Usuario & "'") = -1 Then
Dim respuesta As Byte
respuesta = MsgBox("Ese verificador estaba como activo. ¿Quieres desactivarlo para contar con él?", vbYesNo, "Di que sí, que trabaje algo")
If respuesta = vbYes Then
DoCmd.RunSQL "update verificadores set activo=0 where usuario='" & Me.Usuario & "'"
Usuario.RowSource = "select usuario from verificadores where activo=0"""
ElseIf respuesta = vbNo Then
DoCmd.CancelEvent
End If
End If
End Sub

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando el ejemplo éste. Si lo haces, en el asunto del mensaje pon tu alias Fcarrod, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas