Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   duda acerca de índices (https://www.clubdelphi.com/foros/showthread.php?t=58705)

joanajj 29-07-2008 15:40:48

duda acerca de índices
 
Buenas tardes a todos. Me surge la siguiente cuestión:

una tabla con ADO, con una serie de campos.....entonces utilizo un índice para ordenar uno de ellos(de forma ascendente), en concreto es un campo de tipo alfanumérico...

que ocurre??? si tengo los siguiente valores, así se quedan después de ordenarlos:

169/08
17/08
170/08
199/08
2/08
20/08

y debería ser este otro(por lo menos es lo que busco):

2/08
17/08
20/08
169/08
170/08
199/08

sabe alguien por que puede suceder y como solucionarlo??? muchas gracias...

Neftali [Germán.Estévez] 29-07-2008 16:08:51

Cita:

Empezado por joanajj (Mensaje 304108)
sabe alguien por que puede suceder y como solucionarlo???

Bueno, en realidad no está pasando nada raro. Te lo está ordenando correctamente. Como tú has dicho el campo es ALFANUMERICO, por lo tanto
2/08 no es menor que 17/08 puesto que el no lo ve como números, tú sí.

La solución más fácil que se me ocurre es que utilices ceros (0) a la izquierda; De esta forma quedará así:

002/08
017/08
020/08
169/08
170/08
199/08

Y en ese caso sí te los ordenaría como tú esperas.
El número de ceros que debes añadir a la izquierda dependerá del mayor valor qeu estés almacenando

Neftali [Germán.Estévez] 29-07-2008 16:09:50

Otra opción (creo más complicada) pasa por crear campos separados para los dos valores que estás almacenendo y olvidarte del separador "/"; Para luego cuando los muestres, unirlo y "ofrecerlos" como uno sólo.

joanajj 29-07-2008 17:17:06

Gracias por la respuesta
 
Gracias por la respuesta, creo que optaré por la de colocar 0 delante, creo que es la solución más cómoda y fácil...

pero si que tengo una duda, y si no es mucho pedir me gustaría me aclararas...

por que 02/08 no es menor que 17/08....digo yo que /08 vale igual en ambos casos, pero 02 es menor que 17, salvo que sus valores ascII digan lo contrario...

saludos y gracias de antemano...

Neftali [Germán.Estévez] 29-07-2008 17:26:04

Cita:

Empezado por joanajj (Mensaje 304128)
por que 02/08 no es menor que 17/08....digo yo que /08 vale igual en ambos casos

Yo no creo haber dicho tal cosa...

Cita:

Empezado por Neftali (Mensaje 304118)
...por lo tanto
2/08 no es menor que 17/08 puesto que el no lo ve como números, tú sí.

Desde el punto de vista "alfanumérico"he dicho que:

2/08 no es menor que 17/08
02/08 sí es menor que 17/08

joanajj 29-07-2008 19:18:15

a eso me refiero!!!
 
Neftalí, a eso me refiero, desde el punto de vista alfanumerico, ¿porque 02/08 si es menor que 17/08, y por el contrario 2/08 no es menor que 17/08?, esa es la duda que tengo(es curiosidad)...

Gracias...

Caro 30-07-2008 06:36:10

Cita:

Empezado por joanajj (Mensaje 304158)
Neftalí, a eso me refiero, desde el punto de vista alfanumerico, ¿porque 02/08 si es menor que 17/08, y por el contrario 2/08 no es menor que 17/08?, esa es la duda que tengo(es curiosidad)...

Hola joanajj

02/08 es menor que 17/08 -> porque el 0 es menor que el 1
2/08 no es menor que 17/08 -> porque el 2 es mayor que el 1

Es así porque es alfanumerico.

Saluditos

Neftali [Germán.Estévez] 30-07-2008 08:49:45

Cita:

Empezado por joanajj (Mensaje 304158)
desde el punto de vista alfanumerico, ¿porque 02/08 si es menor que 17/08, y por el contrario 2/08 no es menor que 17/08?

Bueno, creo que Caro lo ha explicado perfectamente. Al tomarlo como alfanumérico debes ir comparando los caracteres empezando por la izquierda como lo harías con los nombre o apellidos.

P A Q U I T A
P E P A
P E P E
P E P O T E


Si con nombres lo ves claro, deberias verlo también con estos:

02/08
17/08
2/08

Separa los caracteres, compara y verás...

0 2 / 0 8
1 7 / 0 8
2 / 0 8


El primer caracter ya te está dando el orden.

joanajj 30-07-2008 21:31:49

Aclarado
 
Muchas gracias, ahora si me ha quedado claro tanto con la explicación de Caro como Neftalí. Creo que el problema me viene, tal como comentó Neftalí en su primera respuesta, y es el haber visto la cifra como números y no haberla visto como lo que son , alfanuméricos y es que ciertamente la cosa cambia, tal como me demostráis.

Un saludo y gracias de nuevo.


La franja horaria es GMT +2. Ahora son las 22:01:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi