¿Cómo ordenar alfanumérico campo texto?

Creo que es un poco tonta, pero no encuentro la solución. A ver si me pueden ayudar.

Tengo una tabla con nombre y modelo, tengo un formulario con un campo de búsqueda de nombre y un cuadro de lista mostrando el nombre y modelo.

El problema es que el campo modelo es formato texto, pero también tiene números. Cuando realizo la consulta de nombre y el modelo es texto, me lo ordena correctamente, pero cuando realizo la búsqueda del nombre y el modelo son números, no me los ordena, los trata como un texto. Paso a describir la tabla.

Nombre.    Modelo

Veneto.       1

Veneto.        10

Veneto.         2

Lombardia.   Blanco

Agua.             Beige

Cuenca.         Único

Basilea.          5

Berlin.             Azul

Como podéis ver, en el campo modelo pueden haber tanto números como palabras y ese es mi problema, tengo que poder identificar si son números, que me los ordene correctamente: 1 2 3 5 10 20

Y si son palabras, que me las ordene alfabéticamente.

3 Respuestas

Respuesta
1

Tendrías que poner alguna imagen de como quieres el resultado, pero...

Si tengo el formulario, tal como dices

Cuando pulso el botón

En este caso, porque no termino de comprender lo que quieres, el código del evento Al hacer clic del botón, aunque se podría poner en cualquier otro evento es

Private Sub Comando5_Click()
Me.RecordSource = "select * from tabla1 order by val([modelo])"
End Sub

Gracias por contestar,

Mi problema es que si le pongo la instrucción val([MODELO]), los campos que contienen texto, no me los ordena alfabéticamente. Te pongo capturas de como queda el filtrado:

Los campos números ahora con la función val, me los ordena

No sé si me había explicado bien en mi pregunta.

Muchas gracias por todo.

Independientemente de que por lo que parece prefieres las respuesta de otro, si te fijas en el el formulario que te puse, Blanco estaba por encima de Beige y una vez pulsado el botón, los coloca en su orden correcto.

Respuesta
2

La respuesta de Julián es la mejor opción, no obstante, puede utilizar format pero los números se ordenaría como 01,02,05,10.

RESULTADO DE LA CONSULTA

Respuesta
1

No se puede, o es texto o es numero y para considerar (en ese contexto) un texto como numero se tendría que utilizar la función VAL.

Para ordenar 'alfabéticamente' números, estos han de tener una estructura 'alfabética', esto es (tomando esa serie como referente):

La serie de referencia: 1,2,10,5

Ordenada alfabéticamente: 1, 10, 2, 5

Se ordena por el primer carácter (digito) después por el segundo ...

Habrá que forzar una estructura (que visualmente representare por ceros, pero estos pueden ser sustituidos por espacios)

La serie de referencia (modificada, todos el mismo numero de 'dígitos'): 01, 02, 10, 05
El orden que se obtiene: 01, 02, 05, 10

Hay una función interesante Space que añade espacios a un texto y se puede utilizar para completar una longitud:

Representare los espacios con guiones bajos y 'el texto es :"789"

Nuevo_texto= Space (10-len(Texto)) & Texto ==>_______789

En la ventana de inmeditato:

Texto = "456"
? Space(10 - len(texto)) & texto
       456

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas