Imprimir página | Cerrar ventana

Cuadro Combinado Cascada Continuos

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85069
Fecha de impresión: 19/Abril/2024 a las 15:31


Tema: Cuadro Combinado Cascada Continuos
Publicado por: jimmycharret
Asunto: Cuadro Combinado Cascada Continuos
Fecha de publicación: 13/Marzo/2020 a las 04:19
Buenas Noches Foro. Estoy trabado en un Formulario continuo, Exactamente en Cuadros Combinados en cascada: cuando ingreso un nuevo registro El programa funciona(Cuadros combinados) los combos en cascada, el problema esta en la modificacion de los combos y exactamente en el ultimo. al no coincidir con los anteriores combos queda vacio osea no carga nada, Y ESO ESTA BIEN, lo que no quiero es que siga adelante o que NO PUEDA GUARDAR, a pesar de que salio vacio el cuadro combinado deja pasar a la siguiente caja y guarda el dato que se guardo por primera vez guardando una informacion falsa o no escogida.

alguien q me ayude puedo enviar el archivo.

no puedo seguir avanzando con mi proyecto sino corrijo esto. les agradesco por adelantado.

Saludos desde Honduras



-------------
jidasoft



Respuestas:
Publicado por: xavi
Fecha de publicación: 13/Marzo/2020 a las 10:57
Hola,

Mira este hilo:
http://www.mvp-access.com/foro/combobox-en-cascada-dentro-de-subformulario_topic82474.html" rel="nofollow - http://www.mvp-access.com/foro/combobox-en-cascada-dentro-de-subformulario_topic82474.html

Encontrarás el clásico ejemplo de Marius y el de emiliove

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: jimmycharret
Fecha de publicación: 13/Marzo/2020 a las 18:09

Buenas, si entiendo que no me explique bien enviare una foto y el archivo.


http://www.filebig.net/files/55FryCW7Ts" rel="nofollow -

Cuando ingreso un nuevo dato Todos los cuadros combinados funcionan super bien.
El problema es cuando edito o modifico el dato de unos o dos combos y como funciona en cadena afecta al ultimo combo que es Talla,


Gracias por su atención




-------------
jidasoft


Publicado por: xavi
Fecha de publicación: 13/Marzo/2020 a las 19:21
Vale, creo que no te entendí bien. Fallo mio.

Entiendo que el último campo no puedes permitir que quede vacío. Supongo que controlar el evento Exit de ese cuadro combinado para ver si está todo relleno sería la primera opción.

Un saludo 




-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: jimmycharret
Fecha de publicación: 14/Marzo/2020 a las 01:51
Xavi Gracias por responder.
Pero intente esto y nada

'If IsNull(Me![COD_TALLA] Or Me![COD_TALLA] = "") Then 'If IsNull(Me!LOTE) Or Me!LOTE = "" Then
'    Beep
'    MsgBox "INGRESE TALLA", vbInformation, "¡¡¡Preste Atención!!!"
'    'Me.COD_TALLA.SetFocus
'End If
_____________________________________________

esto tampoco
'If VarType(Me.COD_TALLA.Value) = vbNull Then
'MsgBox "Debe seleccionar un elemento de la lista."
'Cancel = True
'End If
________________
If IsNull(Me.COD_TALLA) Or Me!COD_TALLA= "" Then Cancel = True

y nada de nada supongo que es que ese combo ya tiene el dato anterior solo que no aparece por el la nueva consulta. por eso estos codigo no le hacen efecto.

SAludos


-------------
jidasoft


Publicado por: jimmycharret
Fecha de publicación: 14/Marzo/2020 a las 01:54
Xavi no se si viste el archivo. Puse el Hipervinculo. te agradezco por tu tiempo.


-------------
jidasoft


Publicado por: 01loko
Fecha de publicación: 14/Marzo/2020 a las 05:02
Si no he entendido mal, quieres que si talla esta vacio no siga.
Prueba:

Private Sub COD_TALLA_LostFocus()
Dim respuesta
 If Me.COD_TALLA.Value = "" Or IsNull(Me.COD_TALLA.Value) Then respuesta = MsgBox("Ojito,talla vacia", vbOKOnly, "ERROR")

If respuesta = vbOK Then Me.COD_COLOR.SetFocus
End Sub




-------------
Recordar de que soy nuevo y estoy aprendiendo.


Publicado por: pitxiku
Fecha de publicación: 14/Marzo/2020 a las 11:17
Lo que yo entiendo es que es la lista lo que se queda vacía, no el valor. Es decir si tenemos 2 cuadros combinados, donde en el primero se puede seleccionar Fruta o Verdura; y en el segundo de puede seleccionar Manzana o Pera para la fruta, y Lechuga o Alcachofa para la verdura, le ocurre que en un registro ya creado: Fruta-> Manzana, si después selecciona Verdura, el valor en el segundo cuadro combinado "desaparece" porque Manzana no es una verdura, pero si no lo modifica sigue quedando ese valor en el campo de la tabla.

Sí es esto, lo más sencillo es probar a poner a Sí la propiedad Limitar a lista del curso combinado, para que Acceda se queje si el valor a guardar no coincide con un valor de la lista.

Otra posibilidad es comprobar la propiedad ListIndex de los cuadros combinados cada vez que cambies la lista. Y si no es un número mayor o igual que cero, limpiar el valor:

- https://support.office.com/es-es/article/listindex-propiedad-b1cbf55a-3813-40d6-81ac-d69a42e45230


Publicado por: jimmycharret
Fecha de publicación: 14/Marzo/2020 a las 16:16
Gracias por las respuestas inmediatas, probare las dos opciones que me dieron. ojalá y sea eso brother. estoy empezando a preocuparme.
Gracias




-------------
jidasoft


Publicado por: emiliove
Fecha de publicación: 14/Marzo/2020 a las 16:47
Mas posibilidades: En el evento después de actualizar del primer combo, puedes indicarle que en el origen de la fila del combo encadenado te establezca los valores que le corresponden y te ponga el valor del primero, que se vaya el foco a dicho combo y lo despliegue, para tener que establecerlo por fuerza.

Tal como lo hago aquí: 

http://emilioverastegui.blogspot.com/2014/08/combos-en-cascada-en-un-formulario_5.html" rel="nofollow - http://emilioverastegui.blogspot.com/2014/08/combos-en-cascada-en-un-formulario_5.html

Saludos.


Publicado por: jimmycharret
Fecha de publicación: 14/Marzo/2020 a las 17:57
El que dio en el clavo en lo que necesito es pitxiku pero a pesar de los ejemplos no me funcionó ninguno.

1. la opcion de cambiar la propiedad Limitar a lista del cuadro combinado a SI ya lo tenia
2. La opcion de comprobar la propiedad ListIndex de los cuadros combinados cada vez que cambie la lista. Y si no es un número mayor o igual que cero, limpiar el valor no ENTENDI
3. Y LA OPCION 3 NO ME FUNCIONO

Dim l As Long
l = Forms![ENTRADAS_FORM_CORTEKIT].Controls(COD_TALLA).ListIndex

envio el archivo para que me puedan ayudar.


http://www.filebig.net/files/55FryCW7Ts" rel="nofollow -


-------------
jidasoft


Publicado por: pitxiku
Fecha de publicación: 15/Marzo/2020 a las 11:16
Después de la línea:

Private Sub LOTE_AfterUpdate()
Me.COD_COLOR = Me.LOTE.Column(3)
Me.COD_TALLA.RowSource = "SELECT Entrada_Gilma.TALLA, TALLA.TALLA FROM Entrada_Gilma INNER JOIN TALLA ON Entrada_Gilma.TALLA = TALLA.Id_TALLA WHERE PO = '" & Me.cmbPO & "' AND ESTILO = " & Me.COD_ESTILO & " AND COLOR = " & Me.COD_COLOR & " GROUP BY Entrada_Gilma.TALLA, TALLA.TALLA"


Pon algo así:

MsgBox Me.COD_TALLA.ListIndex


Y observa la diferencia cuando el elemento exista o no en la lista, cada vez que se actualice. Una vez comprobada, cambia el MsgBox por un If ... Que modifique el valor de la talla cuando el actual no esté en la lista, dejándolo vacío o nulo, según interese.


Publicado por: jimmycharret
Fecha de publicación: 17/Marzo/2020 a las 21:06
Amigo PITXIKU, CON ESTE CODIGO LOGRE QUE SI NO COINCIDE CON LOS ANTERIORES COMBOS
SE CANCELE LA MODIFICACION, PERO AHORA EL PROBLEMA ES CUANDO INGRESO UNO NUEVO.
NO ME DEJA SE CANCELA Y NO LLEGO A TALLA.

QUE PUEDO ARREGLAR, PERO YA VOY SALIENDO GRACIAS


Private Sub LOTE_AfterUpdate()

On Error GoTo solu_err

        Me.COD_COLOR.Enabled = False
        Me.COD_COLOR = Me.LOTE.Column(3)
        Me.LOTE.Enabled = False
        Me.COD_TALLA.RowSource = "SELECT Entrada_Gilma.TALLA, TALLA.TALLA FROM Entrada_Gilma INNER JOIN TALLA ON Entrada_Gilma.TALLA = TALLA.Id_TALLA WHERE PO = '" & Me.cmbPO & "' AND ESTILO = " & Me.COD_ESTILO & " AND COLOR = " & Me.COD_COLOR & " GROUP BY Entrada_Gilma.TALLA, TALLA.TALLA"
       
If Me.COD_TALLA.ListIndex = -1 Then
        MsgBox "No existe esta Orden de Piezas ...."
        DoCmd.RunCommand acCmdUndo



-------------
jidasoft


Publicado por: pitxiku
Fecha de publicación: 18/Marzo/2020 a las 07:15
Estas usando Undo, más lo que hayas puesto después que no se ve. En vez de ese Undo, solo modifica el valor de la talla:

Me.COD_TALLA = vbNull

El control del gasto en la talla hazlo cuando intentes guardar el registro, o en los eventos de su control.


Publicado por: jimmycharret
Fecha de publicación: 21/Marzo/2020 a las 02:39
pitxiku hice un video de 1 minuto miralo porfa

https://www.filebig.net/files/pMrDfSz3ik


Gracias


-------------
jidasoft


Publicado por: pitxiku
Fecha de publicación: 21/Marzo/2020 a las 17:56
A ver si me se explicar:

Tú tienes varios cuadros combinados, y actualizas sus listas dependiendo de los que se ha escrito en otros. Como modificas las listas, a veces el último cuadro combinado se queda con una lista sin elementos. Por otro lado, en ese cuadro combinado siempre quieres que haya un dato guardado, pero que se corresponda a un elemento de la lista. Y luego tenemos que en los registros nuevos, ese cuadro combinado no va a tener un valor por defecto.

Tú, al estar usando el Undo, deshaces lo hecho, con lo que tienes que escribir de nuevo todo (si es que te deja), y haciendo que salga el mensaje en los registros nuevos, porque ese cuadro combinado va a estar vacío.

Yo, personalmente, prefiero controlar datos vacíos/incorrectos en el evento Antes de actualizar del formulario. Más que nada, por tenerlo en un único sitio y para dejar que la gente no tenga que estar metiendo los datos en orden (puede ser que prefieran meter unos determinados datos antes que otros). Es más, ahí puedes controlar todos y con un solo mensaje decir todo los que está mal (al final, se hace muy pesado ver 4 mensajes para cada registro que creas).

Que quieres que si en el último cuadro combinado la lista no tenga el valor guardado anteriormente, se borre: eso se hace asignando un nuevo valor:

Me.COD_TALLA = vbNull

Que quieres que no se admita el valor que ha hecho que se vacíe la lista, tienes que deshacer el cambio, teniendo en cuenta que si es un registro nuevo hay que esperar, pues eso:

If Me.COD_TALLA.ListIndex = -1 Then
    If Not Me.NewRecord Then
        MsgBox "No existe esta Orden de Piezas ...."
        DoCmd.RunCommand acCmdUndo



Imprimir página | Cerrar ventana