Access - Ordenar registro alfanumérico en un campo texto

 
Vista:

Ordenar registro alfanumérico en un campo texto

Publicado por amz (13 intervenciones) el 05/11/2015 15:53:12
Hola!!

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 una 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.

La consulta es de combinación tipo 2, de manera que me saca todos los datos de una tabla estén o no relacionados con la otra tabla (no sé si esto puede acarrear algún problema a la hora de ordenar los datos ya que hay algún campo que está vacío).

Gracias.
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
sin imagen de perfil

Ordenar registro alfanumérico en un campo texto

Publicado por Enrique Heliodoro (1664 intervenciones) el 05/11/2015 21:35:34
Si es un texto, como texto será tratado, se tendrá que 'convertir' a numero para poder obtener el orden deseado.

El inconveniente esta en que es un numero complejo y se tendría que subdividir en sus partes y ordenarlo par ambas.

Analiza si la función InStr (que te permitiría localizar el separador) te seria útil para lograr el éxito.
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

Ordenar registro alfanumérico en un campo texto

Publicado por amz (13 intervenciones) el 09/11/2015 11:17:51
Tengo esta función:

1
2
3
4
5
6
7
8
9
10
11
12
Public Function fncOrdenoDatos(elDato As String) As Integer
    Dim hayGuion As Byte
    hayGuion = InStr(1, elDato, "-")
    If hayGuion <> 0 Then
        fncOrdenoDatos = CInt(Left(elDato, hayGuion - 1))
    Else
        fncOrdenoDatos = CInt(elDato)
    End If
    If IsNull(elDato) Then
    fncOrdenoDatos = CInt(elDato)
    End If
End Function

Y si me funciona en una consulta normal, pero en la que tengo, al ser de combinación 2 no me funciona. En cuanto cambio el tipo de combinación a una simple va perfecto, pero yo necesito la 2 para que me saque todos los datos de una tabla y me da el error me da el error "No coinciden los tipos de datos en la expresión de criterios"
También he probado a hacer una consulta con los datos que necesito sin incluir esta función y otra consulta sobre esta consulta con la llamada a esta función y todo el grill de la consulta pero nada, me da el mismo error "No coinciden los tipos de datos en la expresión de criterios".

Como lo puedo hacer?

Gracias
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

Ordenar registro alfanumérico en un campo texto

Publicado por Enrique Heliodoro (1664 intervenciones) el 09/11/2015 12:25:22
Sin disponer de datos reales, es complicado aportar soluciones que funcionen a la primera, pero se me ocurre una que es aplicable directamente en la consulta, consiste en crear un campo (que puede permanecer oculto) utilizando ese campo de texto cambiando el guion por el separador decimal y evaluándolo como numero (en el ejemplo asumo que se utiliza como separador decimal el punto):

NOrden: Val(Replace([campo texto],"-","."))

En teoría ordenando por el nuevo campo, debería obtenerse el resultado deseado.
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

Ordenar registro alfanumérico en un campo texto

Publicado por amz (13 intervenciones) el 16/11/2015 16:13:28
Solucionado!! Me ha costado un poquillo porque algunos registros estaban el blanco por lo que daba error pero he puesto un filtro para los campos vacíos y funciona perfectamente.

Mil gracias!!!
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