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 06-04-2004
virola virola is offline
Miembro
 
Registrado: sep 2003
Posts: 11
Poder: 0
virola Va por buen camino
consulta sql

Hola, tengo la siguiente tabla:

codi varchar(13),
nomb varchar(30)

y el campo codi tiene los siguientes valores: "c","c ","c " (espacios al final)

La pregunta es porqué cuando hago la consulta siguiente me devuelve los tres registros.

Select * from <nombre_tabla>
where codi = "c"

O tambien se da el siguiente caso (supongo que será por lo mismo):

en codi tengo: "a","b","c", y hago la consulta

Select * from <nombre_tabla>
where codi = "c " (espacios al final)

me devuelve el 3er. registro.


Muchas gracias,
Responder Con Cita
  #2  
Antiguo 06-04-2004
Avatar de haron
haron haron is offline
Miembro
 
Registrado: may 2003
Ubicación: Las Palmas de Gran Canaria
Posts: 310
Poder: 22
haron Va por buen camino
dinos la base de datos que utilizas.

creo que en mysql, por defecto, ignora los espacios en blanco al principio y final y no distingue entre mayusculas y minusculas. le tienes que indicar que es un campo especial.
__________________
“Plantad la semilla de la avaricia en la infértil tierra de la estupidez y obtendreis la bella flor de la mierda”
(Confucio)
Responder Con Cita
  #3  
Antiguo 06-04-2004
virola virola is offline
Miembro
 
Registrado: sep 2003
Posts: 11
Poder: 0
virola Va por buen camino
Consulta SQL

Es de interbase. Tb. he probado la misma bdd con Firebird con los mismos resultados.

Os comento que el problema surgió haciendo un locate en un TIbDataSet de una tabla de artículos, en el que existiendo el codigo "G15" y buscando el "G15 " me devolvia true, y yo entiendo que deberia devolver false.


Un saludo,
Responder Con Cita
  #4  
Antiguo 06-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

La implementación del Locate la realiza el propio componente TIbDataSet, por lo que el error está en el código de ese componente, y no en el Servidor Interbase.

En lo que respecta a las consultas, he confirmado que se comporta como dices. Lo único que te puedo proponer es una forma alternativa de realizar la consulta.

Para ello pón un carácter frontera (he utilizado el # pero puedes indicar cualquier carácter) :

Select * from <nombre_tabla>
where codi || '#' = 'c' || '#'

Solo te devolverá el primer registro, en cambio :

Select * from <nombre_tabla>
where codi || '#' = 'c ' || '#'

Te devolverá los dos ultimos registros.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 06-04-2004
virola virola is offline
Miembro
 
Registrado: sep 2003
Posts: 11
Poder: 0
virola Va por buen camino
Lo que queria decir es que el locate lo implementará lanzando alguna consulta al servidor, y de ahi llegue al ejemplo que propuse...

El problema es que ahora, si no funciona un select, ni funciona el locate, me pasa que podré meter por ejemplo en las líneas de un albarán, codigos de artículos que no existen. Funcionará el findkey? o tendré que utilizar alguna función "trim" antes de hacer el post.

Un saludo
Responder Con Cita
  #6  
Antiguo 06-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Hay que mirar la implementación del TIbDataset, aunque yo me inclino por que un Locate hace un recorrido del Dataset en lugar de lanzar una consulta.

Respecto al FindKey, habrá que probarlo.

Te he pasado una forma de hacer la consulta, en que te puedes asegurarte de buscar con exactamente el nº de espacios que desees. Aunque hacer el Trim tampoco es una mala idea, además lo puedes hacer en un trigger sobre la tabla, de forma que no tienes que preocuparte del programa, el trigger te asegurará que siempre se eliminan todos los espacios en blanco.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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


La franja horaria es GMT +2. Ahora son las 21:24:19.


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