Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sentecia Like (https://www.clubdelphi.com/foros/showthread.php?t=49014)

JcTaztoman 10-10-2007 18:18:52

Sentecia Like
 
hola que tal, alguno de ustedes sabe como utilizar la sentencia LIKE ?? no encuentro la forma de aplicarla, segun es :

Código SQL [-]
sql.add('where p.id_franquicia=f.id_franquicia and p.id_ruta=r.id_ruta and e.serie LIKE' _+quotedstr(Enumcliente.Text)+'%'');
pero pues no mas dice que:
Código Delphi [-]
')' Expected  but identifier '_' found
:confused:

BlueSteel 10-10-2007 18:33:00

Cita:

Empezado por JcTaztoman (Mensaje 237490)
hola que tal, alguno de ustedes sabe como utilizar la sentencia LIKE ?? no encuentro la forma de aplicarla, segun es :


Código SQL [-]
sql.add('where p.id_franquicia=f.id_franquicia and p.id_ruta=r.id_ruta and e.serie LIKE' _+quotedstr(Enumcliente.Text)+'%'');



pero pues no mas dice que:

Código Delphi [-]')' Expected but identifier '_' found

:confused:

Hola JcTaztoman... te recomiendo que pases por guia de estilo...

con respecto a tu consulta,. falta que definas en que estas trabajando.. Delphi,,, y Motor de Base de datos.. (puede que cambie de un motor a otro)

yo tengo esta que funciona con D7 e Interbase

Código SQL [-]
Select * From Proveedor
Where Pro_Razon Like+QuotedStr('%'+vBus.Text+'%')



espero que te sirva:p

JcTaztoman 10-10-2007 18:39:43

Gracias por contestar
 
ok, checaré la guia de estilo, aunq no veo cual fue mi error al escribir el post anterior, bueno solo que no puse que estoy utilizando, jeje

bueno utilizo Delphi 7 y PostgreSql 7

Gracias!

Caro 10-10-2007 19:03:00

Hola, tu comodin _ tiene que estar tambien entre comillas.

Código SQL [-]
sql.add('where p.id_franquicia=f.id_franquicia and p.id_ruta=r.id_ruta and e.serie LIKE '+quotedstr('_'+Enumcliente.Text+'%')');

JcTaztoman 10-10-2007 20:45:43

Gracias
 
Cita:

Empezado por Caro (Mensaje 237506)
Hola, tu comodin _ tiene que estar tambien entre comillas.

Código SQL [-]sql.add('where p.id_franquicia=f.id_franquicia and p.id_ruta=r.id_ruta and e.serie LIKE '+quotedstr('_'+Enumcliente.Text+'%')');

Gracias Carol, ya lo probé, no me marca error ni nada por el estilo, ahora es un error creo q con el componente Zeos el Zquery, ya que despues de agregar toda la sentencia SQL tengo un if, para comprobar que no esta vacia la sentencia, pero me la marca como vacia y pues ya no hace lo que le pido, y si le quito el if me marca

Código:

EvariantTypeCastError Could not convert variant of type (Null) to (string)
ahora no se que hacer, no se si sea el componente, o delphi o q cosa rara! jeje si alguno sabe le pido ayuda.

Gracias.:cool:

JcTaztoman 10-10-2007 20:51:23

upss
 
aqui esta el codigo que estoy usando:

Código Delphi [-]
with ZQuery1 do
    begin
      if active then Close;
      sql.Clear;
      sql.add('select p.id_posicion,e.serie from posiciones2 p,equipos e');
      sql.add('where e.serie like %'+quotedStr(Enumcliente.text));
      Open;
      label1.Caption := zquery1.SQL.Text;//para mostrar lo que tiene la sentencia


          If not zquery1.IsEmpty Then  // hace esta comprobacion y no ejecuta lo que viene enseguida, y si muestra todo el contenido en label1:confused:
             Begin
               label1.Caption := zquery1.FieldValues['id_posicion'];
               end;

bueno si alguien puede ayudarme, lo agradecere mucho

fjcg02 10-10-2007 22:14:46

Hola,
el error es que la sintaxis de la sentencia está mal. El simbolo % debe estar dentro de la cadena por la que busca el like

El resultado de tu codigo , suponiendo que el valor de enumcliente se AB, sería: where e.serie like %'AB' -> esto no lo entiende el analizador del SQL

El resultado de mi código sería: where e.serie like '%AB'

Código Delphi [-]
with ZQuery1 do
    begin
      if active then Close;
      sql.Clear;
      sql.add('select p.id_posicion,e.serie from posiciones2 p,equipos e');
      sql.add('where e.serie like '+quotedStr('%'+Enumcliente.text));
      Open;
      label1.Caption := zquery1.SQL.Text;//para mostrar lo que tiene la sentencia


          If not zquery1.IsEmpty Then  // hace esta comprobacion y no ejecuta lo que viene enseguida, y si muestra todo el contenido en label1
             Begin
               label1.Caption := zquery1.FieldValues['id_posicion'];
               end;

Espero haberte ayudado.
Ya nos comnetarás.

Saludos

JcTaztoman 10-10-2007 22:20:08

gracias [fjcg02]
 
Si ya probé con el operador dentro de la sentecia del quotedstr, y de igual forma no hace nada. ya no se que sea, creo yo un problema con el componente Zquery, pero pues no he podido ubicarlo. seguiré probando.

Gracias por contestar, y si alguien mas sabe, le agradeceré que comente

Lepe 11-10-2007 10:19:51

¿qué base de datos usas?
el campo e.serie ¿como está definido en la base de datos? ¿número?, ¿texto?

Saludos

JcTaztoman 11-10-2007 16:31:10

hola Lepe (Resuelto)
 
pues si, el problema es con los campos de la base de datos, el que la creó hizo que ese campo despues de ingresar la serie se acompletara los espacios hasta llegar a 20 digitos, y pues por eso no funcionaba la sentencia, ese era el problema.

Gracias a Todos por ayudar!!

:)

Lepe 11-10-2007 22:32:43

Aps, pues entonces es un campo Char(20) que tiene ese comportamiento (añadir espacios hasta completar el tope).

Si usas Firebird, (que me parece que sí), puedes usar esto otro:
Código Delphi [-]
 sql.add('where e.serie containing '+ QuotedStr(Enumcliente.text);

Así no tienes que usar el comodin del tanto por ciento, y además busca tanto en mayúsculas como en minúsculas (con Like se busca teniendo en cuenta las mayúsculas que escribas en el Edit).

Saludos

JcTaztoman 11-10-2007 22:57:01

gracias de nuevo
 
estoy usando postgresql, ya se resolvio este problema que tenia, y pues ya funciona lo que me pidieron :) todo era porq tenia el autoacompletar la tabla.

Gracias todos.

Código Delphi [-]
consulta:= 'select substr(e.serie,length(e.serie)-5,6),c.name as nombre_negocio,c.contact as nombre_propietario,r.nombre as nombreruta,l.nombre as nombrelocalidad ';
consulta:=consulta+',c.address1,c.address2, es.nombre as nombrees, eq.producto, u.nombre as unombre';
consulta:=consulta+',cre.credito_solicitado,cre.fechahora_respuesta,sa.saldo';
consulta:=consulta+' from posiciones2 p,rutas r, localidad l,customer c, equipos e,ensambles en,tipo_equipo eq,usuarios u,estados es,creditos cre,saldos sa';
consulta:=consulta+' where p.id_ruta=r.id_ruta and r.id_localidad=l.id_localidad and p.id_customer=c.id ';
consulta:=consulta+'and p.id_ensamble=en.id_ensamble and l.id_estado=es.id_estado and en.id_equipo=e.id_equipo ';
consulta:=consulta+'and p.id_posicion=sa.id_posicion and p.id_posicion=cre.id_posicion ';
consulta:=consulta+'and e.id_tipo_equipo=eq.id_tipo_equipo and e.serie like'+quotedStr('%'+Enumcliente.text)+' order by fechahora_respuesta';

ahi esta el codigo como quedó


nuevamente, Muchas Gracias:D


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

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