Ordenar registro alfanumérico en un campo texto

Tengo una tabla con un campo texto donde almaceno datos alfanuméricos. Por ejemplo: 1, 2, 3, 4-1, 4-2, 10, 10-1, 10-2, 20-1, 20-2,....

Al sacar la consulta y luego un informe, me lo ordena de esta manera: 1, 10-1, 10-2, 2, 20-1, 20-2, 3,...

Quiero ordenarlo numéricamente: 1, 2, 3, 4-1, 4-2, 10, 10-1, 10-2, 20-1, 20-2,.... Y no lo consigo.

1 respuesta

Respuesta

Si bien es sencillo hacer lo que pides, requiere un poquitín (pero poco) de trabajo.

Ahí tienes un ejemplo de cómo podría hacerse: http://www.mediafire.com/download/m2do9udh78m460k/amz83.OrdenacionConsulta.zip

Gracias por tu rapidez. Lo he probado en una consulta sencilla y funciona perfectamente. El problema es que la consulta que quiero hacer tiene varios campos y me sale el error: "no coinciden los tipos de datos en la expresión del criterio". 

He estado trasteando.... puede ser que en mi consulta el tipo de combinación de la relación de las 2 tablas, la he forzado para que me saque todos los campos de una tabla aunque estén vacíos? He cambiado la relación a tipo 1 y si funciona pero yo necesito la tipo 2.

Por cierto, hay veces que los datos 4-1, 4-2, y similares los ordena bien y otros datos al revés 10-2, 10-1

Gracias.

Por el tema de tu consulta-objeto original...

Haz la consulta que necesites con el tipo de relación que necesites, aunque no te dé los datos ordenados. En esta consulta olvídate del campo calculado que llama a la función.

Una vez hecha créate otra consulta sobre la original, metiendo todos los campos en el grid de la consulta, y es en esta segunda consulta donde añades el campo calculado que llama a la función, y la ordenas por los dos campos tal y como está en el ejemplo.

En cuanto a los nulos, añade un control de nulos en la llamada a la función. Como no recuerdo los detalles del ejemplo y ahora no tengo tiempo de mirármelo te lo pongo más o menos como debería ser el campo calculado:

datoOrdenado: Iif(isnull(elcampo);"";fncOrdenaDatos(elCampo))

Y en cuanto a la ordenación... ahí sí que poca cosa puedo decirte: para Access "10-1" es menor que "10-2", lo mires por donde lo mires. Quizá tengas algún espacio que influya, quizá tengas "algo" que influya... pero si los datos son exactamente esos Access lo ordena correctamente. Y, si no, haz una prueba filtrando sólo por esos dos registros en tu consulta original y dales ordenación, y debería funcionarte, salvo que, como te indicaba, tengas "algo" que influya y que sin verlo no puedo decir qué podría ser.

¡Gracias! Solucionado!!!

Hola,

He tenido que modificar la consulta y ahora no me sale. La consulta es de tipo combinación 2 por lo que hay un campo "FechaEntrada" que puede salir en blanco. Si hago una consulta con el campo calculado sobre esa consulta sin el campo calculado me da el error "no coinciden los tipos de datos en la expresión del criterio". 

Si por ejemplo, en el criterio de la consulta indico un artículo en concreto, si me sale y lo ordena perfectamente pero necesito que salgan todos los registros...

He intentando incluir en la función el control de nulos que me indicas y no soy capaz porque me da errores por todos los lados (por si el problema viene del campo "FechaEntrada" que puede estar vacío...)

Si vais complicando las cosas la respuesta se vuelve de cada vez más difícil, máxime si no veo en absoluto qué es lo que estás haciendo.

Si quieres que te eche una mano prepara una miniBD con los elementos implicados y cuélgala para que yo pueda verla, porque desconozco si la fecha influye o no si no veo cómo lo has estructurado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas