PDA

Ver la Versión Completa : ¿Como ordenar bien los codigos?


judoboy
06-05-2003, 19:05:20
Mi problema es el siguiente, utilizo Interbase, y quiero ordenar bien por código. 1,2,3,...,10,11,...99,100

Pero me pasa lo siguiente me lo ordena así 1,10,100,11,2,3,...

Si para los diez primeros utilizo 01,02,03,..09 me ordena bien hasta el 100, pero a partir de ahí me falla.

Y si quiero que sea el código autoincrementable me falla, ya que despúes del 99, siempre me genera el 100


Lo hago con una consulta tipo 'Select Max(CODIGO) from TABLA'

e incremento en uno el resultado

__marcsc
06-05-2003, 19:10:33
Ese problema que citas no será debido a que el campo es alfanumérico en lugar de ser numérico? Porqué es lo que parece...

maeyanes
06-05-2003, 19:47:43
Me imagino que si, ya que puede agregarle el 0 a la izquierda y guardar el valor...

Saludos...

judoboy
07-05-2003, 00:52:51
Pues el asunto es que si, que es alfanumerico.

Pero entonces, puedo solucionarlo, o no?

judoboy
07-05-2003, 08:37:09
¿Puedo cambiar el tipo de campo para que sea numerico?

BenjiRock
07-05-2003, 11:19:10
Como poder cambiar lo puedes cambiar. La forma que yo conozco es eliminar el campo y volverlo a crear de nuevo indicando que es numerico, pero si ya tiene datos la tabla pues la cosa se complica y mas si ademas es clave o forma parte de ella.

Puedes crearte un nuevo campo de tipo numerico, te creas un programita que pase los datos del campo alfanumerico al nuevo campo. Una vez echo esto modifica las claves si las tienes y lo enlazas con el nuevo campo y eliminas el alfanumerico.

Creo que es una solución un tanto chapuza, pero en este momento no se me ocurre otra, espero que te pueda ayudar.

suerte

__cadetill
07-05-2003, 11:27:16
Tambien puedes cambiarlo accediendo a las tablas de sistema


UPDATE RDB$RELATION_FIELDS
SET RDB$FIELD_SOURCE="Tipo_Campo"
WHERE RDB$FIELD_NAME="Nombre_Campo" AND
RDB$RELATION_NAME="Nombre_Tabla";


Espero te sirva

guillotmarc
07-05-2003, 11:46:56
Hola.

También puedes probar a hacer simplemente un casting de tipo (no creo que esta expresión sea muy correcta).

Es una chapuzilla, porqué no se podrá usar ningún índice para optimizar el resultado, y si hay algún valor que no sea numérico va a cascar, pero para salir del paso ....

'Select Max(cast(CODIGO as integer)) from TABLA'

Saludos.

judoboy
07-05-2003, 12:15:53
Gracias a todos por vuestras respuestas.

EL tipo de campo lo consigo cambiar con el IBExpert, sin tener que eliminar el campo, ni borrar datos ni nada de nada.
He creado el campo como integer, y me pasa lo siguiente.

Si creo en una tabla registros del 1 al 99, lo hace bien,
pero al crear el numero 100, en mi formulario no me muestra los 99 anteriores, solo me muestra los del 101 al 999, del pasa de este al 1000 pasa lo mismo. Sin embargo si elimino el registro 100 me vuelve a mostrar bien del 1 al 99.

Que hago utilizo lo del Select Cast, o si quiero que sea númerico, porque pasa lo anterior?

__cadetill
07-05-2003, 12:20:25
De echo, el IBExpert lo que ha hecho internamente es lo que yo te habia comentado :p

Respecto a tu nuevo problema, la verdad es que no te he entendido mu bieng :(

Podrias mirar de explicarte algo mejor?

judoboy
07-05-2003, 12:30:31
Me explico:

Digamos que tengo una tabla cuya clave principal es CODIGO.
Vale pues el problema es cuando pasa del registro 99 al 100, o del 999 al 1000.

Si tengo ya creados 99 registros: numerados del 1 al 99, y creo el registro 100.
Pues en mi formulario solo me muestra el 100, (y los sucesivos hasta el 999) pero no los 99 primeros, parece que se hayan volatilizado.
ES decir después de crear el 100, hago un Tabla.Prior y me muestra el 100, hago un Tabla.Next y me muestra el 100, lo mismo con el First y el Last. Es decir que parece que solo tenga el registro 100. Pero si elimino este ( y todos los comprendidos entre el 100 y el 999) ya puedo acceder a todos los demás del 1 al 99 claro esta.

erickperez6
08-05-2003, 02:59:08
Saludos, nunca lo he intentado con campos de diferentes naturaleza, pero ya que en el campo codigo no existe ningun caracter alfabetico deberia de funcionar lo siguiente:

ALTER TABLE NOMBRE_TABLA ALTER COLUMN NOMBRE_CAMPO TYPE INTEGER;

Esto deberia cambiarte el tipo del campo dejando intacto la data en dicho campo.

Saludos !

judoboy
09-05-2003, 17:31:09
no me deja hacer la modificación.

¿Alguna idea más?