** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Como cambiar a falso una casilla de verificación
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoComo cambiar a falso una casilla de verificación

 Responder Responder Página  12>
Autor
Mensaje
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Tema: Como cambiar a falso una casilla de verificación
    Enviado: 16/Septiembre/2015 a las 02:08
Hola de nuevo, ahora tengo un problema:

En un formulario con vista predeterminada "formulario continuos", tengo una casilla de verificación que chuleo según el registro que quiero tomar, así que puedo tomar varios, como puedo con un botón hacer que todos los chuliados se conviertan en falso, es decir, como puedo quitar todos los chulos en un solo click,

utilice: me.escoger = false, pero como supondrán solo pone en falso el que este activo tenga el foco

Muchas gracias



Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 09:05
Hola alexmubo,

yo lo haría así,

''=============================================================

''tienes que activar la referencia ADO

Dim Rs As New ADODB.Recordset


    Rs.Open "MI TABLA O MI SQL", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

 
       
            Rs.MoveFirst ''Nos movemos al primer registro.
                  
                   

                Do While Not Rs.EOF ''mientras no estes por debajo del último registro itera
                    
                    
                       
                    If Rs.Fields("NOMBRE CAMPO Tabla").Value =True Then ''si el campo en el recordset es verdadero
                   
            me.[NOMBRE CAMPO FORMULARIO].Value=false ''lo convertimos a false

                    End If
                                        
                    
                     Rs.MoveNext ''nos movemos al siguiente registro
                Loop
               

                Rs.Close    ''cerramos el recordset
                Set Rs = Nothing ''liberamos recursos

''=============================================================

Nombre campo tabla=es el campo que tienes en la tabla o SQL que coincide con tu Chekbox
Nombre campo formulario=Es el nombre del formulario donde tienes el objeto Chekbox que quieres dejar en false.




También podrías, con un bucle For Each, recorrer todos los campos del formulario de su coleccion controls, con una variable tipo control, comprueba si el tipo de objeto es un Checkbox y lo dejas en false.

Esto es un pista por si quieres hacerlo de otra manera e invetigar un poco.


Espero te sirva.

 






Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 09:50
Que manía mas absurda: meter ADO en donde por diseño existe DAO ....

Formulario con origen de datos = conjunto consistente de datos

Todo formulario con origen de datos, crea 'al nacer' un recordset (RecordsetClone) que es DAO y al que le añade un identificador único a mayores (aquí lo dejo, porque no tiene interés para el caso).

En base a lo que tenemos:

Me.RecordsetClone.MoveFirst
Do Until Me.RecordsetClone.Eof
   Me.RecordsetClone.Edit
   Me.RecordsetClone![nombre del campo] = 0
   Me.RecordsetClone.Update
   Me.RecordsetClone.MoveNext
   Loop


.- No se necesita crear ningún recordset (utilizamos lo que tenemos)
.- No se 'pierde el tiempo' verificando estados (si era false lo seguirá siendo)

Si no gusta el nombre 'recordsetclone' porque es muy largo, feo ... motivos varios, lo ocultamos:


With Me.RecordsetClone
.MoveFirst
Do Until .Eof
   .Edit
   ![nombre del campo] = 0
   .Update
   .MoveNext
   Loop
End With

¿Qué hace ese fragmento de código?

Utiliza el conjunto de datos del formulario (El RecordsetClone)
Se desplaza al primero (.....MoveFirst)
repite un bucle hasta alcanzar el final (Do Until .....Eof)
Edita el registro actual (....Edit)
Le asigna un valor (y no le importa poner un false si hay un false, pierde mas tiempo 'pensando si es o no false) ....![nombre del campo] = 0
Lo guarda (....Update)
Va al siguiente (....MoveNext)
Fin del bucle (Loop)

Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1849
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 10:11
O también:

CurrentDb.Execute "UPDATE Tabla SET Campo = False;"

Saludos.
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 11:51
La tabla implica todo el conjunto de registros, aquí se trata de actualizar 'solo' el subconjunto de datos que hay en el formulario.

Para utilizar esa SQL, el origen tendría que limitarse al subconjunto que exista en el formulario, tendrían que aplicando filtros circunstanciales (los que hubiere en su propiedad FILTER y teniendo en cuenta si esta activo) además de tener en cuenta el filtro implícito que hay en una supuesta relación de formulario/subformulario (el código expuesto es valido para aplicar en un formulario o en un subformulario), aunque aquí parece que se trata de un formulario simple en vista 'formulario continuo'.

P.D.
Edito para añadir que lo de 'false' quizás no sea adecuado, lo correcto seria:
Antes: CurrentDb.Execute "UPDATE Tabla SET Campo = False;"
Despues: CurrentDb.Execute "UPDATE Tabla SET Campo = 0"

Editado por E. Feijoo - 16/Septiembre/2015 a las 11:53
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 21:03
Publicado originalmente por E. Feijoo E. Feijoo escribió:

Que manía mas absurda: meter ADO en donde por diseño existe DAO ....

Formulario con origen de datos = conjunto consistente de datos

Todo formulario con origen de datos, crea 'al nacer' un recordset (RecordsetClone) que es DAO y al que le añade un identificador único a mayores (aquí lo dejo, porque no tiene interés para el caso).



Esta mañana conteste pero no se que ha pasado, supongo que como era con el movil, cosas de las teclas y del que las maneja, supongo.

Más o menos decia:

Enrique, tienes toda la razón, lo peor del caso es que se lo de DAO y en algún hilo, creo haber comentado que tengo vicios creados por utilizar ADO en vez de DAO, al ser este nativo de access y es mucho mejor para trabajar con este.

A partir de ahora, "desempolvare" mis apuntes de DAO y le pegare un repaso.
Darte las gracias por lo comentado, por que con estas críticas constructivas es una forma de aprender más y mejor, ¡ siempre es un lujo aprender de un MAESTRO !

Con mis mejores afectos.


Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 16/Septiembre/2015 a las 23:36
Hola a todos, como siempre con ustedes, los maestros, he aprendido demasiado, tomando en cuenta que debía "atacar" directo a la tabla se me ocurrió lo siguiente:

Dim strSQL As String

DoCmd.SetWarnings False

strSQL = "UPDATE Tecnicos SET Tecnicos.Escoger = False;"

DoCmd.RunSQL strSQL

Y funciono lo que quería, pero luego vi la opción de Omnipresente y quedo:

CurrentDb.Execute "UPDATE Tecnicos SET Tecnicos.Escoger = False;"

Ahorrándome código y haciendo exactamente lo que necesitaba.

Igual voy a ensayar los códigos de Enrique y Jmmiralles, para entender que hacen y como en un futuro pudiera usarlos.

Muchas gracias compañeros.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 17/Septiembre/2015 a las 20:42
Hola, ya que no han cerrado este hilo, tengo otra inquietud, se puede de alguna manera poner en verdadero unas casillas de verificacion, dependiendo de un rango?

Por ejemplo: D1, D2, D3, D4 y en dos cuadros de texto llamados: Ini y Fin, existe alguna manera de poner en verdadero solo aquellos cuya parte del nombre esta entre esos rangos: es decir "D" & 1, "D" & 2, etc?


Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4767
Enlace directo a este mensaje Enviado: 17/Septiembre/2015 a las 20:51
Claro puedes crear una función o procedimiento, creas un recordset de la forma que te mencionan Jmmiralles y Enrique, sobre la tabla o sobre el formulario. Observa lo que dice Enrique sobre el filtro, la consulta que te hicieron es sobre toda la tabla y quizas tu lo requieras sobre el formulario.
 
Saludos.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 17/Septiembre/2015 a las 22:58
Hola, la verdad que no se como armar la comparación entre el campo inicial y el campo final, para luego comenzar el ciclo e ir poniendo en true el rango, en la parte editada de enrique, me funciona con false.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 18/Septiembre/2015 a las 09:05
Que funcione con una u otra, a veces depende de la versión (de Access) pues es su motor al analizar la sintaxis el que 'entenderá' que False es una constante o no (hay que tener en cuenta también el caso de si se ejecuta con Access o con Runtime), cero es el valor 'real' del campo y no tendrá que buscar en otro sitio, lo aplica y punto ¿o lo que comentas es porque con el valor cero no te funciona?.

Para lo que comentas de actuar sobre rangos, primero has de 'construir el/los rangos' y una forma de lograr la sintaxis es .... si con esa parte 'maldita' que algunos llaman 'generador de consultas en modo grafico' y que permite tanto a los que comienzan a gatear como a los que teclean incluso dormidos el experimentar (consultas de selección) con los datos como si jugaran con los Lego o un Mecano ....

Una vez logrado el éxito con la selección de datos, se acude a su 'vista SQL' y detrás del 'Where' esta la sintaxis del filtro o método a aplicar.

Access provee de herramientas (sencillas y útiles) el negar su existencia y despreciarlas no convierte a nadie en 'sabio', por el contrario: le hace comportarse mas bien como idiota.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 18/Septiembre/2015 a las 17:03
Hola Enrique, lo de false, lo dije porque esa me funciono, pero ya ensaye con el 0 y me funciona igual, asi que en adelante seguiré usando el 0, y como dices, es verdad, yo he aprendido mucho con el generador de consultas, pero cosas relativamente sencillas, voy a comenzar a meterme con ciclos y bucles porque veo que si comienzo a dominar ese tema me voy a ahorrar dolores de cabeza y solucionar cosas que no pude hacer por el desconocimiento.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 18/Septiembre/2015 a las 21:23
En contre este codigo en internet:


  
    Static bValue As Boolean
      
    bValue = Not bValue
      
    Dim xCheckBox As Control
    
    For Each xCheckBox In Me.Controls
        
        If TypeOf xCheckBox Is CheckBox Then
          
           xCheckBox.Value = Abs(bValue)
        End If
    Next

Ya lo probe y lo que hace es poner los chulos a todos los checkbox, y quitarlos, pero repito, no tengo idea de como implementar que solo se activen los que estan dentro del rango del nombre de cada control:

D1, D2, D3 etc
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 4922
Enlace directo a este mensaje Enviado: 18/Septiembre/2015 a las 21:57
Hola!

Como te habían comentado, deberías de definir exactamente el valor o los valores del rango. puedes utilizar una consulta de actualización con la clausula Where:

DoCmd.RunSQL "UPDATE Tecnicos SET Tecnicos.Escoger = True Where ini ='" & aquí el valor & "' OR fin = '" & aquí el valor & "'"

Editado por mounir - 18/Septiembre/2015 a las 21:58
Un Saludo.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 461
Enlace directo a este mensaje Enviado: 18/Septiembre/2015 a las 23:24
Hola mounir, dos preguntas: esa linea de codigo la pondria entre estas lineas?:

 For Each xCheckBox In Me.Controls
  
 DoCmd.RunSQL "UPDATE Tecnicos SET Tecnicos.Escoger = True Where ini ='" & aquí el valor & "' OR fin = '" & aquí el valor & "'"

      End If
 Next

Como desarmo el nombre del campo para que el bucle tome el dato para buscar? es de decir, los campos los llame D1, D2, D3... pero en realidad buscaria el numero del nombre.

y la busqueda seria entre rangos, en el campo ini puedo poner 1 y en el campo fina 5, osea se chuliarian el D1,D2,D3,D4 y D5 unicamente.

Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable