Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Órden alfabético en la Clausula Order by

Hola amigos del club, tengo el siguiente problema en mi base de datos, que es una interbase 6, tengo la siguiente sql.

select * from alumnos
order by apellido1, apellido2, nombres

lo ordena de la siguiente manera
-------------------------------

apellido 1 apellido 2 Nombres
-------------------------------
Beltran Badilla Pedro Juan
Águila Acuña Francisco Pedro <----------- ?????????????

Ahora que pasa con el tílde, al parece el sql lo toma como un símbolo especial por lo tanto no lo interpreta como un vocal acentuada.

que podría hacer en el sql o la base interbase para que me pudiera interpretar bien los tíldes?, Gracias amigo por leer este hilo.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #2  
Antiguo 26-02-2009
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Lo que se suele hacer en estos casos es, o bien tener un campo más con los nombres "normalizados" (sin acentos ni otros caracteres especiales) o seleccionar el campo mediante alguna función o procedimiento almacenado que elimine dichos acentos y los sustituya por sus letras "normales"

Un saludo
Responder Con Cita
  #3  
Antiguo 26-02-2009
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Depende del motor de la base de datos que estés utilizando. Yo no he visto que los acentos afecten al orden en la aplicación que estoy realizando ahora en el trabajo (MySQL). Aun así, la solución de ElKurgan puede ayudar.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 26-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Y cambiando el juego de caracteres? (creo que se podía hacer para cada campo de forma individual)

A ver si alguno de los que sabe de IB/FB aporta algo más...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 26-02-2009
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Te pongo una declaración de domino, utilizo FB 1.5 pero creo que para IB también será valido. Tienes que fijarte en el juego de caracteres que es WIN1252 y el collate es la forma en la que ordena de ahí que se utilice el PXW_SPAN de españa.

Código SQL [-]
CREATE DOMAIN TWC_NOMBRE AS 
VARCHAR(60) CHARACTER SET WIN1252 
COLLATE PXW_SPAN

Espero que te sirva.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #6  
Antiguo 26-02-2009
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Supongo que lo que te dice Durbed funciona, si no prueba con

CARACTER SET DOS850
COLLATE DB_PT850

en FireBird 1 ordena según el orden latino internacional que es el correcto actualmente para el español.
Responder Con Cita
  #7  
Antiguo 26-02-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Gracias Fidel

Lo intente lo que pasa que ya tengo con datos la base y cuando le asigno el dominio a un campo me borra la data.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #8  
Antiguo 27-02-2009
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Tendrás que crear una tabla nueva con otro nombre y los mismos campos definidos con CARACTER SET DOS850 COLLATE DB_PT850, pasar a esta nueva tabla todos los datos, borrar la original y renombrar la nueva con el nombre original.
Si te conectas con un IBDatabase, en su caracter set debes poner ISO8859_1 para que visualice bien la ñ, ç, vocales acentuadas, etc.

.....

Por otra parte, he observado que en la versión 2 de FireBird con CARACTER SET ISO8892_1 y COLLATE ES_ES ya ordena bien según el orden latino internacional (el correcto), pero no lo hace igual con las tildes cuando el ordenamiento es a un campo que cuando es a dos campos.

Si lo hago a dos campos APELLIDO1, APELLIDO2 y me dejo la tilde en algún Martínez me ordena así.

Martinez Abad
Martinez Ruiz
Martínez Pérez
Martínez Ruiz

en cambio si tengo un solo campo APELLIDOS ordena bien aunque en algún Martínez se me olvide la tilde

Martinez Abad
Martínez Pérez
Martinez Ruiz
Martínez Ruiz

De todas formas esto supongo que se evita haciendo lo que dice ElKurgan.
Responder Con Cita
  #9  
Antiguo 02-03-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Otra consulta

Con la siguiente query creo dominios:

Código SQL [-]
CREATE DOMAIN TWC_NOMBRE AS VARCHAR(60) CHARACTER SET WIN1252 COLLATE PXW_SPAN
Y con esto creo campos en una table
Código SQL [-]
alter table alumnosadd campo1 char(30)
ahora como creo ese mismo campo asignandole el dominio creado más arriba.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #10  
Antiguo 02-03-2009
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Código SQL [-]
ALTER TABLE ALUMNOSADD
ADD CAMPO1 TWC_NOMBRE
COLLATE PXW_SPAN

TWC_NOMBRE es el nombre que les doy yo, donde TWC es un identificador del nombre de la aplicación que usa la base de datos , es decir, que puedes poner el nombre que quieras.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #11  
Antiguo 02-03-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Gracias Durbed

Ha sido de gran ayuda
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #12  
Antiguo 15-03-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Usuario me reportado error

Cita:
Empezado por fidel Ver Mensaje
Tendrás que crear una tabla nueva con otro nombre y los mismos campos definidos con CARACTER SET DOS850 COLLATE DB_PT850, pasar a esta nueva tabla todos los datos, borrar la original y renombrar la nueva con el nombre original.
Si te conectas con un IBDatabase, en su caracter set debes poner ISO8859_1 para que visualice bien la ñ, ç, vocales acentuadas, etc.

.....

Por otra parte, he observado que en la versión 2 de FireBird con CARACTER SET ISO8892_1 y COLLATE ES_ES ya ordena bien según el orden latino internacional (el correcto), pero no lo hace igual con las tildes cuando el ordenamiento es a un campo que cuando es a dos campos.

Si lo hago a dos campos APELLIDO1, APELLIDO2 y me dejo la tilde en algún Martínez me ordena así.

Martinez Abad
Martinez Ruiz
Martínez Pérez
Martínez Ruiz

en cambio si tengo un solo campo APELLIDOS ordena bien aunque en algún Martínez se me olvide la tilde

Martinez Abad
Martínez Pérez
Martinez Ruiz
Martínez Ruiz

De todas formas esto supongo que se evita haciendo lo que dice ElKurgan.
Como lo ha dicho fidel, hay problemas con los tíldes, usuarios me han reportado el siguiente problema en el orden alfabético.

Coloma Iturriaga Sebastián
Contreras Pérez Miguel
Chinni Aylwin Francisca
incluso cuando el orden lo realizo por el primer apellido
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #13  
Antiguo 15-03-2009
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Cita:
Coloma Iturriaga Sebastián
Contreras Pérez Miguel
Chinni Aylwin Francisca
En este caso el problema no es el acento, es la Ch que la ordena después de la C y no según el orden latino internacional.

Si usas InterBase 6 usa CARACTER SET DOS850 COLLATE DB_PT850
Responder Con Cita
  #14  
Antiguo 16-03-2009
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 22
Manuel Va por buen camino
Cita:
Empezado por fidel Ver Mensaje
En este caso el problema no es el acento, es la Ch que la ordena después de la C y no según el orden latino internacional.

Si usas InterBase 6 usa CARACTER SET DOS850 COLLATE DB_PT850
AL CREAR ESTE DOMINIO DA UN ERROR,

CREATE DOMAIN TWC_APELLIDOS_NEW AS VARCHAR(25) CHARACTER SET DOS850 COLLATE DB_PT850
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #15  
Antiguo 16-03-2009
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Cuando tuve yo este problema hice estas anotaciones:

Se crea la base de datos con CARACTER SET DOS850
▸ Los campos VarChar con CARACTER SET DOS850 y COLLATE DB_PTB850
▸ Los campos Memo se puede dejar CARACTER SET ISO_8859_1
▸ Al hacer la conexión a la base de datos, ya sea con IBExpert o en las aplicaciones con el componente TIBDatabase se pone CARACTER SET ISO_8859_1, y con esto se ordena correctamente y se ven bien todos los caracteres (si se conecta con CaracterSet DOS850 los caracteres con ascii no estandar no se ven como son).

Por lo tanto puede ser que tengas que crear la tabla con CARACTER SET DOS850

De todas formas yo creo las tablas y campos antes con IBExpert, no en ejecución.

El problema si tienes que crear nuevas tablas es que tendrías que pasar a las nuevas todos los datos que ya tienes, y merecerá o no la pena dependiendo de lo importante que sea que ordene bien, a veces es fundamental, sobre todo cuando hay por medio asuntos legales que cuando hay errores pueden dar lugar a reclamaciones judiciales.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Orden Alfabético en QuickReport silver07 Impresión 4 23-10-2007 16:30:40
Orden alfabetico y no actual de los sheet(hojas) en excel mariano_9 Varios 0 20-04-2007 20:56:43
Clausula order by C1, C2 desc Jack Firebird e Interbase 3 05-11-2004 20:29:22
Problemas con el orden alfabetico... mauriciorazquin Tablas planas 1 08-10-2003 17:51:03
Orden alfabético en español Tomás Firebird e Interbase 3 05-06-2003 21:42:49


La franja horaria es GMT +2. Ahora son las 13:03:21.


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
Copyright 1996-2007 Club Delphi