Trabajar con un campo de tipo Sí/No

Tengo que haceros una pregunta con el fin de solucionar el problema que tengo con los campos de tipo si/no.

En un formulario tengo varios campos de tipo si/no, en forma de "casilla de verificación" o "botón de opción", aunque con conseguir que funcione uno, los otros es copiar y pegar.

Por ejemplo, tengo un campo que se llama "radial" donde los trabajadores SÓLO pueden utilizarla (y por lo tanto yo poder activarla) si han hecho un curso que yo le especifico en unas variables. Si no han hecho ese curso, no pueden utilizar dicha maquinaria y por lo tanto yo no podré activar esa opción (saldrá un box).

El tema es el siguiente:

Si el campo está activado (quiere decir que tiene esa formación) que me deje desactivarlo sin más, pero si no está activado, que me busque si tiene la formación que le especifico en las variables (cursoc y cursod, por ejemplo). Si no devuelve registros no me debería activar el campo (mediante box), pero si tiene alguna de esas dos formaciones (por ejemplo) que sí me permita activar la opción.

Os pongo el código en el que he trabajado y que no me funciona. Por cierto, el código lo he puesto en Onclick.

Private Sub radial_Click()
On Error Resume Next

' Compruebo si el campo está activado y si está activado que me deje desactivarlo. Si no está activado que busque las concordancias.

If Me.radial.Value <> 0 Then
     Me.radial.Value = 0
     Exit Sub
Else

    Dim cursoc, cursod, dni, dnic As String

  ' Defino los cursos en 2 variables
  dnic = Me.dni
  cursoc = "20 horas encofrados"
  cursod = "6 horas encofrados"

' Compruebo si los trabajadores tienen la formación especificada en las variables

  Set Rst = CurrentDb.OpenRecordset("SELECT * FROM formacionpersonal WHERE dni = '" & dnic & "'   AND nombrecurso = '" & cursoc & "' OR nombrecurso = '" & cursod & "'")

  If Rst.RecordCount = 0 Then
          MsgBox "El trabajador no tiene formación para poder utilizar esta maquinaria"
  Else 
         Me.radial.Value = 1
  End If
End If
End Sub

1 respuesta

Respuesta
1

Ricardo: No he repasado el código completo, pero si quieres activar un Control Si/No y como consecuencia su origen has de utilizar:

Me.Radial = -1

Mis saludos >> Jacinto

Nada, he probado con -1, con <>0, con true, con verdadero, pero no hay forma de que funcione. No me deja ni activar ni desactivar ... no me deja hacer nada con ese botón de opción.

Ricardo: Leeré con un poco más de tiempo tu pregunta y te comento.

Estoy ahora en una zona rural de cobertura ocasional. Intento contestarte en un hueco.

Mis saludos >> Jacinto

Ricardo: El usar literales en las búsquedas siempre será un problema, salvo que estés seguro de que no hay cambios en acentos, comas, espacios etc.

Yo trabajaría con una Tabla de Cursos, con un IdCurso y DescripCurso por ejemplo y en la Tabla FormacionPersonal guardaría el IdCurso en lugar del “Literal”, pero entiendo que eso son opciones y costumbres personales.

Dicho esto y contando con lo que veo, el primer sondeo no tiene sentido, ya que el resto del código actúa decidiendo el valor adecuado.

Si lo que quieres es forzarlo siempre a False, lo haces directo Con>>

Me.DarDeBaja.Value = 0

El resto del Código:

Private Sub radial_Click()
 'Me.radial.Value = 0 'Línea Opcional
 Dim ElDNI As String, CursoC As String, CursoD As String
 Dim Rst As DAO.Recordset
 'Defino las variables de búsqueda
  ElDNI = Me.dni
  cursoc = "20 horas encofrados"
  cursod = "6 horas encofrados"
  'Compruebo si el Trabajador tienen la formación especificada en las variables
   Set Rst = CurrentDb.OpenRecordset("SELECT * FROM formacionpersonal WHERE dni = '" & ElDNI & "'   AND nombrecurso = '" & cursoc & "' OR nombrecurso = '" & cursod & "'")
   If Rst.RecordCount = 0 Then
        MsgBox "El trabajador no tiene formación para poder utilizar esta maquinaria"
        Me.radial.Value = 0
   Else 
        MsgBox “ El CheckBox quedará Activado”,vbinformation,”MENSAJE DE SEGUIMIENTO”
        Me.radial.Value =- 1         
   End If
   Rst.Close
   Set Rst = Nothing
End Sub

Quizá yo hubiera utilizado un DCount... en lugar de un Recordset, pero según lo que te comento arriba, son costumbres y maneras de operar. Mis saludos >> Jacinto

Nada ..... que lo he intentado pero no sale .....

Private Sub radial_click()
Dim dnic As String, cursoc As String, CursoD As String
Dim Rst As DAO.Recordset
'Defino las variables de búsqueda
dnic = Me.dni
cursoc = "*ENCOFRADOS*"
'Si el campo está activado, que me deje desactivarlo sin más (eso querría decir que ya tiene formación)
If Me.radial.Value = -1 Then
             Me.radial.Value = 0
             Exit Sub
End If

' Y ahora a buscar. Pongo el LIKE pq el curso puede ser de 6 horas o de 20 horas.

Set Rst = CurrentDb.OpenRecordset("SELECT * FROM formacionpersonal WHERE dni = '" & dnic & "' AND nombrecurso LIKE '" & cursoc & "'")

'Si no hay registros, querría decir que el trabajador no dispone de esa formación.
'por tanto, mensajito y que se salga.

If Rst.RecordCount = 0 Then
MsgBox "El trabajador no tiene formación para poder utilizar esta maquinaria"
Me.radial.Value = 0

Else

'Si "else" querría decir que el trabajador sí tiene formación de "ENCOFRADOS" por lo tanto puede usar esa maquinaria. Que lo active y se salga.

MsgBox "El CheckBox quedará Activado", vbInformation, "MENSAJE DE SEGUIMIENTO"
Me.radial.Value = -1
End If
Rst.Close
Set Rst = Nothing
End Sub

....... pero algo debo hacer mal porque no funciona. Si está activado al desactivarlo me dice que no tiene formación y después si lo quiero volver a activar ya no me deja. Y si está desactivado tampoco me deja activarlo aunque tenga la formación ...... yo creo que está fallando en la búsqueda (consulta) .... ayuda, por favor

Por cierto, lo de "*ENCOFRADOS*" también lo he puesto sin los * y tampoco funciona.

Ricardo: Me hago cargo de tu dificultad, pero si vas cambiando los criterios, dificilmente vamos a avanzar.

Haz las pruebas tal como en tu pregunta Original comentabas y con el código que te he sugerido.

Si lo que quieres es buscar "encofrados", no veo que sentido tiene la variable.

Mi sugerencia es que después de familiarizarte con los criterios que anunciabas, pases al LIKE directamente con "Encofrados". Si tienes dudas sobre el uso de LIKE, puedes echar una ojeada a la propia ayuda de Acces, que viene explicada bastante bien.

Si es que tienes dificultades con la ayuda de Access, en éste enlace lo tienes resumido, pero hay otros.

https://support.office.com/es-es/article/Usar-los-criterios-Like-para-buscar-datos-65b07c8a-b314-435a-8b48-2b911856d4f9 

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas