Access - orderby

 
Vista:
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 11/12/2021 18:40:21
Hola a tod@s
Tengo un formulario con, entre otras, dos columnas: precio_muestra y PVP*100/UDDES, ademas tengo 2 cuadros combinados, 1 para seleccionar la subfamilia y 2 para cambiar el orden por una de las 2 columnas mencionadas, en el evento after updadte tengo:
Private Sub Cuadro_combinado35_AfterUpdate() 'ordenar por
MsgBox "CC35_AfterupadateValue=" & Me.Cuadro_combinado35.Value
Select Case Me.Cuadro_combinado35.Value
Case "Precio_muestra"
Me.OrderBy = [precio_muestra]
Me.OrderByOn = True
Case "pvp*100/uddes"
Me.OrderBy = [PVP*100/UDDES]
Me.OrderByOn = True
End Select
End Sub
No consigo que me funcione, si en las propiedades del formulario pongo, en Ordenar por precio_muestra o PVP*100/UDDES si que funciona bien
Alguie me puede decir qué es lo que hago mal?
Gracias
Pablo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

orderby

Publicado por Anonimo (3368 intervenciones) el 11/12/2021 21:45:20
Primero pondría un punto de interrupción y verificaría con un paso a paso (F8) si recorre el código y se cumplen las condiciones, en particular que el MsgBox tenga el mismo valor que se compara en el CASE.

Desconociendo como se le asignan datos al combo, verificaría la existencia de espacios (no se aprecian visualmente, pero incordian bastante)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 11/12/2021 22:10:52
Hola Anónimo
El msgbox lo puse para saber que valor tenía el combo, puede tener uno de los dos valores que se comparan en el case. Puede que lo mejor sea borrar todos y escribirlo de nuevo, lo que más me mosquea es que escribiendo los valores del combo en las propiedades del formulario si ordena bien.
Mañana probaré a ir paso a paso con F8 a ver si encuentro algo
Gracias
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

orderby

Publicado por Eduardo (334 intervenciones) el 13/12/2021 17:29:11
El problema está en [PVP*100/UDDES] al utilizar * Access se confunde porque * es un comodín. Recomendación no utilice estos símbolos para nombres de campos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 13/12/2021 19:54:41
Había pensado que el problema está en ese campo, es un campo calculado, cuando pongo: Me.OrderBy = [PVP*100/UDDES] lo cambie a: Me.OrderBy = [precio_muestra] * 100 / [unidades_muestra] y sigue sin ordenar
Alguna idea?
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 13/12/2021 22:03:53
Le agradezco su idea pero, me gustaría hacerlo yo, quiero aprender no que me hagan las cosas.
El formulario que nos ocupa se basa en una consulta. Tiene mucho campos, 2 que son: precio y precio/unidades, el primer campo es precio_muestra y el segungo es un campo calculado que llamo precio*100/uddes:precio_muestra*100/unidades_muestra. La instrucción Orderby va seguida de un nombre de campo entre comillas, no?. Vi la sql de la consulta que funciona como quiero y en la última línea pone:
ORDER BY [precio_muestra]*100/[unidades_muestra], muestras.precio_muestra, tiendas.nombre_tienda;
Cómo pongo en codigo el nombre del campo entre comillas y que al mismo tiempo...
Tal vez " ' " &?
Gracias
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

orderby

Publicado por Anonimo (3368 intervenciones) el 13/12/2021 23:35:01
Access espera un texto con el o los nombres de los campos, no una expresión que posiblemente al evaluarla no le lleve a ningún sitio (porque no existe)

Original:
1
2
3
Case "pvp*100/uddes"
Me.OrderBy = [PVP*100/UDDES]
Me.OrderByOn = True


Si los nombres de los campos/objetos no están 'normalizados' (contienen espacios y/o símbolos raros) para que Access los tome de forma literal han de ir entre corchetes (si no los necesita y se le añaden no produce error), en esa línea de trabajo:

1
2
3
Case "pvp*100/uddes"
Me.OrderBy = "[PVP*100/UDDES]"
Me.OrderByOn = True

Una pregunta curiosa:

Si el dato que devuelve el combo es literalmente el nombre del campo por el que se desea ordenar .... ¿Para que el Case?

Esto debería funcionar pues los datos que devuelve el combo suelen ser texto (pero en una variable de tipo Variant que en ocasiones es traicionera)

1
2
3
4
Private Sub Cuadro_combinado35_AfterUpdate() 'ordenar por
Me.OrderBy = Me.Cuadro_combinado35
Me.OrderByOn = True
End Sub

En respuesta al interrogante:

Las dobles comillas NO se pueden utilizar en una expresión que comienza y finaliza (esta definida) por las dobles comillas.
En su lugar (y dentro de esa expresión) tenemos dos posibilidades
.- duplicar el numero de dobles comillas (creo recordar que se hace 'un bocadillo' con tres)
.- la alternativa de utilizar para definir el texto dentro de la expresión, una comilla simple en lugar de la doble.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

orderby

Publicado por Eduardo (334 intervenciones) el 13/12/2021 23:49:44
No es que le vaya a hacer su trabajo, es para analizar en detalla cual puede ser el error y hacérselo saber
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 14/12/2021 20:14:28
Hola
Sigo con el problema de que no quiere ordenar por ese campo calculado
En la consulta origen del formulario tengo un campo calculado:
PVP*100/UDDES:[precio_muestra]*100/[unidades_muestra]
Probé a poner: Orderby=[PVP*100/UDDES] y Orderby=[precio_muestra]*100/[unidades_muestra]
No funciona de ninguna de las dos formas
No se por donde tirar
Gracias
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

orderby

Publicado por Eduardo (334 intervenciones) el 14/12/2021 21:04:19
Dudo que pueda ordenar por campos Calculados, porque esto internamente es una fórmula, ese es uno de los problemas cuando diseñamos campos y asignamos el TIPO DE DATOS como calculado.

No obstante debe utilizar es el nombre que tiene el campo calculado NO la fórmula "pvp*100/uddes"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 14/12/2021 21:32:13
O sea que no puedo ordenar por campos calculados de la consulta
Hay alguna forma de ordenar por esos campos?
Se podría hacer creando un campo en la tabla con tipo de datos numérico simple, que se llene al meter datos de precio y unidades?
Se me acaba de ocurrir esta idea, lo malo es que es un dato que se obtiene con otros dos de la tabla, no es redundante?
Gracias
Pablo
Mañana veré la contestación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

orderby

Publicado por Anonimo (3368 intervenciones) el 14/12/2021 23:27:14
Un campo generado con un calculo en una consulta da como resultado (origen para ese dato) un valor.

En el formulario en el que se interactúa con los datos solo habrá una condición: ese campo no es modificable (se podrá modificar el origen para obtener el nuevo dato, pero no el dato ya calculado).

Y si, se puede ordenar porque no será un calculo, será un valor

Y sinceramente, el problema real lo podrás analizar de una forma sencilla: en lugar de utilizar ese ¿nombre? llama al calculo 'XXXX' o 'Pepe' y actúa en función de los resultados obtenidos.

Seria interesante mantener un estilo de programación (la de cada uno) pero pensando en que dentro de un tiempo (muchas veces corto) ya no se sabrá quien es ' Me.Cuadro_combinado35.Value' o para lo que sirve y sin embargo se utiliza '[PVP*100/UDDES]' para intentar no perder de vista lo que hace.

¿Para cuando darle el tipo de dato adecuado a OrderBy? .... espera UN TEXTO y según esto :

Probé a poner: Orderby=[PVP*100/UDDES] y Orderby=[precio_muestra]*100/[unidades_muestra]

No se le da un texto ....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

orderby

Publicado por Pablo (328 intervenciones) el 15/12/2021 20:38:11
Hola otra vez:
Al fín lo conseguí, borre el formulario, su código e hice todo de nuevo, consigo que con un grupo de opciones se seleccione una de las dos columnas a ordenar.
Gracias
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar