No consigo hacer funcionar correctamente los cuadros combinados inteligentes

Estoy intentando crear los formularios combinados inteligentes que Sveinbjorn El Rojo me recomendó, pero no soy capaz de que funcionen como quiero. A ver, son varias cosas:

La primera es que hay formularios que el cuadro combinado me aparece en blanco. Este es el código que inserto (lo mismo este es más complejo), y no sé qué está mal:

Private Sub CboArticulo_Change()
    Me.CboArticulo.RowSource = "SELECT DISTINCT [01-TPV Articulos].Articulo AS Artículo, [01-TPV Categorias].NombreCat AS Categoría, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo, [01-TPV Articulos].[Articulo]" _
        & "FROM [01-TPV Categorias] INNER JOIN [01-TPV Articulos] ON [01-TPV Categorias].CodCat = [01-TPV Articulos].CodCat" _
        & "GROUP BY [01-TPV Articulos].Articulo, [01-TPV Categorias].NombreCat, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo, [01-TPV Articulos].[Articulo]" _
        & "HAVING ((([01-TPV Articulos].Activo)=True) WHERE (([01-TPV Articulos].[Articulo]) Like '" & Me.CboArticulo.Text & "*'))" _
        & "ORDER BY [01-TPV Articulos].Articulo, [01-TPV Articulos].[Articulo]"
    Me.CboArticulo.Dropdown
End Sub
Private Sub CboArticulo_Enter()
    Me.CboArticulo.RowSource = "SELECT DISTINCT [01-TPV Articulos].Articulo AS Artículo, [01-TPV Categorias].NombreCat AS Categoría, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "FROM [01-TPV Categorias] INNER JOIN [01-TPV Articulos] ON [01-TPV Categorias].CodCat = [01-TPV Articulos].CodCat" _
        & "GROUP BY [01-TPV Articulos].Articulo, [01-TPV Categorias].NombreCat, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "HAVING ((([01-TPV Articulos].Activo) = True))" _
        & "ORDER BY [01-TPV Articulos].Articulo"
    Me.CboArticulo.Requery
End Sub
Private Sub CboArticulo_GotFocus()
    Me.CboArticulo.RowSource = "SELECT DISTINCT [01-TPV Articulos].Articulo AS Artículo, [01-TPV Categorias].NombreCat AS Categoría, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "FROM [01-TPV Categorias] INNER JOIN [01-TPV Articulos] ON [01-TPV Categorias].CodCat = [01-TPV Articulos].CodCat" _
        & "GROUP BY [01-TPV Articulos].Articulo, [01-TPV Categorias].NombreCat, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "HAVING ((([01-TPV Articulos].Activo) = True))" _
        & "ORDER BY [01-TPV Articulos].Articulo"
    Me.CboArticulo.Requery
End Sub

En este código que veis, mi problema viene con el "Having", que la condición Where para que vaya coinciendo con lo que escribo en el cuadro combinado me la mete dentro de ese "Having". Desconozco si eso no pasa nada, o, como podéis ver, "fuerzo" y pongo el Where.

2

2 Respuestas

864.050 pts. No responderé preguntas de usuarios que no valoren las...

Primeramente comentarte que con que pongas el código en uno de los dos eventos (al entrar o al recibir enfoque) es suficiente, porque hace lo mismo.

Para tratar de resolver tu primera duda, te diría que mirases el código que pones en la segunda (el filtro de lo que escribes en el combinado se lo pones en el HAVING), o si no te funciona así, pruebes a poner el WHERE antes del GROUP BY.

También te diría que primeramente pruebas esas SQL directamente en una consulta para ver si te devuelve los resultados que esperas, sustituyendo la parte que hace referencia al combinado por una letra o letras, por ejemplo:

SELECT DISTINCT [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría] FROM [01-A Categorías] GROUP BY [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría] HAVING ((([01-A Categorías].[Código de la categoría]) Like '9***') AND (([01-A Categorías].[Categoría]) Like 'S*')) ORDER BY [01-A Categorías].Categoría

Otra cosa, que no tiene nada que ver con tu pregunta, pero lo veo "raro": Si quieres filtrar el código de la categoría que empiece por 9, puedes poner simplemente Like '9*' (añadir asteriscos es innecesario). Si lo que quieres es que empiece por 9 y tenga otros tres caracteres cualquiera, sería: Like '9???'. Lógicamente si tu campo solo admite una longitud de 4 caracteres, te daría igual usar una u otra opción, pero si admite más el resultado variará.

Hola. Vamos por partes.

Respecto a este desplegable:

He probado con estos dos códigos:

Private Sub CboArticulo_Change()
    Me.Texto58.Value = Me.CboArticulo.Text
    Me.CboArticulo.RowSource = "SELECT DISTINCT [01-TPV Articulos].Articulo AS Artículo, [01-TPV Categorias].NombreCat AS Categoría, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo, [01-TPV Articulos].[Articulo]" _
        & "FROM [01-TPV Categorias] INNER JOIN [01-TPV Articulos] ON [01-TPV Categorias].CodCat = [01-TPV Articulos].CodCat" _
        & "GROUP BY [01-TPV Articulos].Articulo, [01-TPV Categorias].NombreCat, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo, [01-TPV Articulos].[Articulo]" _
        & "HAVING ((([01-TPV Articulos].Activo)=True) AND ([01-TPV Articulos].[Articulo] Like '" & Me.Texto58 & "*'))" _
        & "ORDER BY [01-TPV Articulos].Articulo"
    Me.CboArticulo.Dropdown
End Sub

Y:

Private Sub cc_Change()
    Me.cc.RowSource = "SELECT DISTINCT [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría]" _
        & "FROM [01-A Categorías]" _
        & "WHERE (([01-A Categorías].[Categoría]) Like '" & Me.cc.Text & "*')" _
        & "GROUP BY [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría]" _
        & "HAVING (([01-A Categorías].[Código de la categoría]) Like '9***')" _
        & "ORDER BY [01-A Categorías].Categoría"
    Me.cc.Dropdown
End Sub

Ambos funcionan... pero el desplegable no muestra las dos opciones que tiene que mostrar:

Ahí tendría que mostrar Servicios y Simyo. Sin embargo, en la consulta sí que funciona perfectamente. Debe ser alguna configuración del cuadro desplegable que desconozco.

Lo del Like '9*' lo miraré. Gracias por la mejora.

Pues si ambas SQLs te funcionan directamente en una consulta, no logro imaginar por qué motivo no te funcionan en el combo... y no se me ocurre nada que puedas hacer para solucionarlo, salvo que compruebes las propiedades que cito en e ejemplo y las tengas igual configuradas...

Hola. He conseguido hacerlo funcionar todo, salvo el de CboArticulo. El problema era que tenía la Expansión automática activa.

En el caso de CboArticulo, lo tengo igual que los que ha funcionado, pero, por algún motivo, no me muestra nada cuando despliego el cuadro. Y las consultas funcionan bien. A ver si me pudieras ayudar de alguna manera, porque es una putada que este, el más importante, no funcione.

Luego hay un problema en los formularios continuos que desaparece los anteriores registros. No sé si eso lo habías contemplado.

¡Mil gracias, y disculpa!

Mira las pruebas que estoy haciendo. He creado un formulario en blanco con el mismo desplegable y las configuraciones que indicas en el PDF:

He puesto en VBA para analizar el código. Así, cuando escribo, mira lo que pasa:

Sinceramente, no sé por qué no funciona.

Pues sinceramente, no consigo ver el problema, porque la SQL es correcta y en una consulta te devuelve los resultados que se esperan de ella... Lo único que se me ocurre que pruebes es poner la propiedad "heredar lista de valores" en No, a ver si suena la flauta...

En cuanto al tema del formulario continuo, deberías saber que aunque tu veas muchos cuadros combinados, realmente solo existe uno, y si le cambias el origen de datos, es normal que en aquellos registros que tengan un valor distinto al de ese origen, no se vea nada (aunque en la tabla siguen estando). Para solucionarlo, pon en el evento "al activar registro" del formulario el mismo código que tienes en el evento "al entrar" o "al recibir enfoque" del cuadro combinado

No ha funcionado lo de poner "Heredar lista de valores" en No.

De todas formas, muchas, muchas gracias. Es una putada que no haya conseguido sacar ese desplegable, pues es el que más falta nos hacía para el TPV. Aún así, lo mismo planteo la pregunta en el foro de Access, a ver si hay alguien que es capaz de ver dónde está el fallo.

Un saludo.

25 pts. Get what you want to if you want, cause you can get anything

Luego, en otro, me hace esto no me muestra las opciones que coincide cuando escribo una primera letra:

El código de este desplegable es el siguiente:

Private Sub cc_Change()
    Me.cc.RowSource = "SELECT DISTINCT [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría]" _
        & "FROM [01-A Categorías]" _
        & "GROUP BY [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría], [01-A Categorías].[Categoría]" _
        & "HAVING ((([01-A Categorías].[Código de la categoría]) Like '9***') AND (([01-A Categorías].[Categoría]) Like '" & Me.cc.Text & "*'))" _
        & "ORDER BY [01-A Categorías].Categoría"
    Me.cc.Dropdown
End Sub
Private Sub cc_Enter()
    Me.cc.RowSource = "SELECT [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría]" _
        & "FROM [01-A Categorías]" _
        & "GROUP BY [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría]" _
        & "HAVING ((([01-A Categorías].[Código de la categoría]) Like '9***'))" _
        & "ORDER BY [01-A Categorías].Categoría"
    Me.cc.Requery
End Sub
Private Sub cc_GotFocus()
    Me.cc.RowSource = "SELECT [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría]" _
        & "FROM [01-A Categorías]" _
        & "GROUP BY [01-A Categorías].Categoría, [01-A Categorías].[Código de la categoría]" _
        & "HAVING ((([01-A Categorías].[Código de la categoría]) Like '9***'))" _
        & "ORDER BY [01-A Categorías].Categoría"
    Me.cc.Requery
End Sub

En cuanto al otro formulario, me he dado cuenta de que la columna dependiente es la categoría del artículo, y no el nombre del artículo. Si lo tengo así es porque hay tickets en que hay artículos descatalogados, y no aparecían. Entonces, he creado un campo donde vaya cambiando con lo que voy escribiendo en el cuadro combinado, pero me da error. Este es el código:

Private Sub CboArticulo_Change()
    Me.Texto58.Value = Me.CboArticulo.Text
    Me.CboArticulo.RowSource = "SELECT [01-TPV Articulos].Articulo AS Artículo, [01-TPV Categorias].NombreCat AS Categoría, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "FROM [01-TPV Categorias] INNER JOIN [01-TPV Articulos] ON [01-TPV Categorias].CodCat = [01-TPV Articulos].CodCat" _
        & "WHERE ([01-TPV Articulos].[Articulo] Like '" & Me.Texto58 & "*')" _
        & "GROUP BY [01-TPV Articulos].Articulo, [01-TPV Categorias].NombreCat, [01-TPV Articulos].SKU, [01-TPV Articulos].PVP, [01-TPV Articulos].Activo" _
        & "HAVING ((([01-TPV Articulos].Activo) = True))" _
        & "ORDER BY [01-TPV Articulos].Articulo"
    Me.CboArticulo.Dropdown
End Sub

Pero tampoco me funciona.

La pregunta no admite más respuestas

Más respuestas relacionadas