Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema De Consulta Con Like (https://www.clubdelphi.com/foros/showthread.php?t=92311)

Espartaco 25-09-2017 20:28:19

Problema De Consulta Con Like
 
Hola Amigos, tengo un pequeño problema, a ver si podeis ayudarme.

Resulta que en un programa con Delphi 5 y tablas Paradox, intento hacer una consulta SQL con LIKE, y unas veces me funciona y otras no y no se porque.

Si utilizo esta consulta:

Código Delphi [-]
select * from ":GRUPOEMPRESA:AMIGOS.DB"
where APELLIDOS like '%'+'NAVARRO'+'%'
order by FPRESENTACION desc

En teoria deberia mostrarme todos los registros que contengan en el campo APELLIDOS el valor NAVARRO, pues no, hay algunos registros que no salen.

Sin embargo si utilizo esta consulta:

Código Delphi [-]
select * from ":GRUPOEMPRESA:AMIGOS.DB"
where APELLIDOS = 'NAVARRO RUIZ''
order by FPRESENTACION desc

Si me aparece el registro que antes no me aparecia. Que estoy haciendo mal en la primera consulta?

Muchas Gracias por anticipado. Un Saludo.

ecfisa 25-09-2017 20:58:28

Hola.

Te pongo un ejemplo que usa la tabla employee que viene con Delphi:
Código Delphi [-]
procedure TForm1.btnBuscarClick(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM EMPLOYEE WHERE LastName LIKE :PARAM';
  Query1.ParamByName('PARAM').AsString := '%' + Edit1.Text + '%' ;
  Query1.Open;
end;

Muestra:


Saludos :)

lupinfree 26-09-2017 19:28:32

Hola, puede ser que los % estan mal puestos. Deberia ser '%Navar%'
y mostraria todos los apellidos que tengan la cadena Navar es decir por ejemplo Navarro Navarrete Nava.... y tambien y aqui invento palabras para ser especifico conNavar ConNavarion estoNavarrito casiNavaral es decir todas las palarbras que tengan la forma ...Navar... .

Espartaco 27-09-2017 13:33:42

Gracias por contestar.

Aclaro, el problema es que cuando uso like (en el primer ejemplo) solo me muestra unos cuantos registros que cumplen la condicion, lo que pasa es que hay otro registro que en teoria cumple la condicion pero no lo muestra. Entonces no se por que unos si los muestra y otros no.

Yo siempre he usado esto y no me habia dado ningun problema.

He probado usando El parametro pero se comporta igual.

Hay algo que no se que provoca el error. A ver si se os ocurre algo porque estoy desesperado. He probado con acentos y sin acentos y hace lo mismo.

Muchas gracias de antemano. Quedo a la espera.

Casimiro Notevi 27-09-2017 14:54:48

Pues tendrás que decirnos qué datos son esos, porque no somos adivinos.

Espartaco 27-09-2017 19:51:34

Pues por ejemplo, intento buscar los registros que tienen en el campo nombre 'DARÍO', y cuando ejecuto la consulta me devuelve tres registros que cumplen la condicion pero hay un cuarto que tambien la cumple pero no me lo devuelve.

Si realizo la consulta en el campo apellidos, introduzco 'NAVARRO' y me devuelve dos registros y sin embargo hay tres que cumplen esa condicion.

Gracias de nuevo por el interes

Casimiro Notevi 27-09-2017 20:04:47

Eso no es información para que podamos ayudarte :confused:

Espartaco 27-09-2017 20:23:17

Dime que necesitas y lo pongo con gusto. Al principio he puesto como realizo la consulta, por si tenia algun error, es que no se que informacion mas poner para que me podais ayudar.

roman 27-09-2017 21:16:41

Cita:

Empezado por Espartaco (Mensaje 521363)
Pues por ejemplo, intento buscar los registros que tienen en el campo nombre 'DARÍO', y cuando ejecuto la consulta me devuelve tres registros que cumplen la condicion pero hay un cuarto que tambien la cumple pero no me lo devuelve.

Si realizo la consulta en el campo apellidos, introduzco 'NAVARRO' y me devuelve dos registros y sin embargo hay tres que cumplen esa condicion.

Lo que tienes que poner para que podamos ayudarte es el contenido de los registros que sí te devuelve y los que no.

LineComment Saludos

Espartaco 27-09-2017 21:34:11

Pues por ejemplo si busco el nombre DARÍO me muestra

DARÍO GÓMEZ SÁNCHEZ
ABEL DARÍO CAMPOS GUTIÉRREZ

y no me muestra

DARÍO NAVARRO SÁNCHEZ

Son dos campos distintos NOMBRE y APELLIDOS, creo que el resto de campos no hace falta porque son muchos, FECHANACIMIENTO, NOMBREDELPADRE, NOMBREDELAMADRE, DOMICILIO, ETC..

Si los necesitais os los pongo, sin problema.

Casimiro Notevi 28-09-2017 00:06:18

Pero tú estás buscando por apellido:
Código SQL [-]
where APELLIDOS like
No puedes encontrar el campo nombre si no lo buscas.

En todo caso, añádelo a la búsqueda:
Código Delphi [-]
Query1.Close;
Query1.SQL.Text := 'select * from tbAmigos where (nombre like :Param1') or (apellidos like :Param2);
Query1.ParamByName('param1').AsString := '%' + Edit1.Text + '%' ;
Query1.ParamByName('param2').AsString := '%' + Edit1.Text + '%' ;    // No sé si es necesario repetirlo, ya que son iguales. Desconozco paradox.
Query1.Open;
Prueba con el código que ha puesto ecfisa.

Espartaco 02-10-2017 12:06:44

Hola Casimirio, gracias por contestar. A ver creo que no me he explicado bien. Al decir en el mensaje anterior lo de Nombre y Apellidos era para que supierais que son campos diferentes nada mas.

He probado el consejo de ecfisa y la respuesta al abrir la consulta es igual que la que me devuelve la que he puesto al principio del hilo.

Resulta que cuando intento buscar unos registros que cumplan con la condicion que he puesto en el ejemplo, no me devuelve todos los registros que la cumplen, ese es el problema. Da lo mismo si busco por el campo NOMBRE que por el campo APELLIDOS, en ambos casos se comporta como he dicho, es decir no me muestra todos los registros que cumplen con la condicion, y no se por que, ya que esto llevo años utilizandolo y nunca he tenido problema con esto, pero ahora resulta que me falla y no se por que. No se si esto le ha ocurrido a alguien alguna vez. La tabla es una tabla PARADOX, que no tiene nada especial, los campos son bastante comunes, por lo tanto no creo que tenga nada que ver su estructura.

En el ejemplo anterior, que he puesto que buscaba por el campo NOMBRE todos los registros que incluyeran el nombre 'DARIO', cuando realizo la consulta, me devuelve dos registros, y sin embargo hay tres registros que en el campo NOMBRE incluyen la palabra 'DARIO'. Ese es el fallo que no soy capaz de resolver.

Espero haberme explicado mejor ahora. Gracias por atenderme y quedo a la espera de alguna opinion.

Casimiro Notevi 02-10-2017 12:21:23

Es que no podemos probar tus datos porque no los tenemos, al igual que tampoco tenemos tu código. Pero lo que sí podemos asegurar es que si en el campo nombre hay 3 registros "DARIO" si haces un select por "DARIO" devolverá los 3 registros. Si uno de ellos no lo devuelve es porque no pone "DARIO", lo mismo pone "DARI0", "DARlO", etc. (un cero, una ele, etc.)

Espartaco 22-01-2018 20:21:05

Hola amigos, comentaros que ya solucione el problema.

El problema estaba en la tabla. En realidad no se que le pasaba, sin embargo copie todos los registros en una nueva con la misma estructura y ya se soluciono el problema.

Lo pongo por si a alguien le puede servir, ya que me ha vuelto loco durante mucho tiempo.

Muchas gracias por vuestra ayuda. Sois los mejores.

Un saludo a todos.

manelb 23-01-2018 15:49:57

Cuando tenemos una incidencia con tablas paradox lo primero que hacemos es reparar tablas con una estupenda herramienta llamada sysutils
Errores extraños, consultas que no devuelven los registros esperados..., la mayoría de las veces se soluciona.

Saludos


La franja horaria es GMT +2. Ahora son las 21:11:57.

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