Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Validar busqueda en base de datos (https://www.clubdelphi.com/foros/showthread.php?t=61581)

lucho1981 13-11-2008 05:17:19

Validar busqueda en base de datos
 
Hola gente, les comento q este es mi primer hilo y q tambien soy nuevito en el mundo de delphi. Utilizo delphi 7 y MySQL, conectados por ODBC.
Mi problema surge intentar hacer una consulta.
Tengo un DBGrid (donde me mostrará la consulta) conectado a un DataSource y este a un Query. En el Query recibo por parametros el valor del TEdit.
La consulta se realiza con exito si pongo en el edit un apellido existente o el comienzo correcto de alguno, pero me salta un error cuando pongo a buscar un apellido q no existe en la DB.

Adjunto el codigo de la consulta por parametros y a continuacion de la consulta en MySQL

with Dm.Qape do
begin
ParamByName ('pape').Value:= ape.Text+'%';
ExecSQL;
Dm.Qape.Close;
Dm.Qape.Open;
end;


SELECT * FROM usuarios
WHERE apellido LIKE :pape


Espero haber sido muy claro y no repetitivo y q puedan contestar mi pregunta.
Muchas gracias.

olbeup 13-11-2008 08:57:54

Hola lucho1981,

Nunca he utilizado los ParamByName, pero si he utilizado mucho el LIKE, lo que tienes que hacer es lo siguiente:

Cambia el: ParamByName ('pape').Value:= ape.Text+'%';
por: ParamByName ('pape').Value := QuotedStr(ape.Text+'%');

Caro 13-11-2008 13:14:31

Cita:

Empezado por olbeup (Mensaje 325733)
Cambia el: ParamByName ('pape').Value:= ape.Text+'%';
por: ParamByName ('pape').Value := QuotedStr(ape.Text+'%');

Hola, cuando se utiliza parametros ya no es necesario el QuotedStr (las comilllas).

Lo que veo en tu codigo es que utilizas ExecSql, esa sentencia solo se utiliza cuando haces cambios en tu BD, como tu estas haciendo una consulta, debes utilizar Open.

Código Delphi [-]
with Dm.Qape do
begin
 ParamByName ('pape').Value:= ape.Text+'%';
 Open;
end;

Saluditos

lucho1981 13-11-2008 14:34:10

Muchas gracias
 
Cita:

Empezado por olbeup (Mensaje 325733)
Hola lucho1981,

Nunca he utilizado los ParamByName, pero si he utilizado mucho el LIKE, lo que tienes que hacer es lo siguiente:

Cambia el: ParamByName ('pape').Value:= ape.Text+'%';
por: ParamByName ('pape').Value := QuotedStr(ape.Text+'%');

Muchas gracias olbeup por tu aporte, aunque no me sirvio para mi caso tu respuesta me sirvio mucho para aprender.


Muchas gracias Caro, me sirvio muchisimo tu ayuda. Es justo lo que estaba necesitando.:):):)

lucho1981 13-11-2008 17:48:15

Surgio otro problema
 
Hola amigos, resulta q ahora el error q tengo es que cuando en el evento onkeypress de un edit quisiera q me mostrara los apellidos de una tabla en un grid.
Lo primero q hago es validar para q solo escriban letras.
El problema es: cuando aprieto la letra "L" no me muestra nada, cuando presiono "A" me muestra todos los apellidos q comienzan con la L, cuando presiono una "M" me muestra todos los q comiencen con LA y asi.

Adjunto el codigo.

Código SQL [-]
procedure TFUsuarios.ApeKeyPress(Sender: TObject; var Key: Char);

begin
       Gape.Visible:=true;
       Gprincipal.Visible:=false;
       Dm.Qape.Close;

   if not(key in['a'..'z','A'..'Z',#8]) then
      begin
        key:=#0;
      end
   Else
      begin
        with Dm.Qape do
          begin
              ParamByName ('pape').Value:=ape.text+'%';
              Dm.Qape.Open;

          end;
       end;
  end;

Ojala q me puedan ayudar. algo seguro q estoy haciendo mal

Caro 13-11-2008 18:22:49

Hola de nuevo, tienes que utilizar el evento OnKeyUp de tu edit que es el momento en que sueltas la techa pero también puedes utilizar el evento OnChange de tu edit que se da cuando ha habido un cambio en tu Edit. Solo paar la parte de la busqueda, tu validación de que solo reciba letras lo puedes seguir haciendo en el OnKeypress.

Saluditos

lucho1981 13-11-2008 19:02:33

Muchas gracias
 
Cita:

Empezado por Caro (Mensaje 325856)
Hola de nuevo, tienes que utilizar el evento OnKeyUp de tu edit que es el momento en que sueltas la techa pero también puedes utilizar el evento OnChange de tu edit que se da cuando ha habido un cambio en tu Edit. Solo paar la parte de la busqueda, tu validación de que solo reciba letras lo puedes seguir haciendo en el OnKeypress.

Saluditos


Muchas gracias Carito. Sos una genia y te ganaste mi respeto y cariño:rolleyes:.

Saluditos

lucho1981 13-11-2008 19:52:07

Aqui de nuevo
 
Otra ves yo con problemas y de seguro son super sencillos de resolver
Cuando quiero buscar listar en un grid pero ahora por dni capturados de un edit me da error al compilar porq no me reconoce '%' al pasar el valor del edit por parametro.
Cabe aclarar q lo hice en el evento KeyUp como me enseño Caro para el mismo problema, pero la busqueda por apellido.

Código SQL [-]
begin
             Gleg.Visible:=true;
             Gprincipal.Visible:=false;
             Dm.Qlegmodificar.Close;
        with Dm.Qape do
          begin
              ParamByName ('plega').Value:=StrToInt(lega.Text)+'%';
              Dm.Qlegmodificar.Open;
          end;
end;

Muchas gracias de antemano y perdón por las consultas si es que son molestas.

Caro 13-11-2008 20:19:23

Hola de nuevo, por lo que veo tu DNI debe ser de tipo Integer, para utilizar el like y sus comodines tienes que pasarle como String, no lo conviertas a entero.

Código Delphi [-]
 ParamByName ('plega').Value:=lega.Text+'%';

Nota.- Si te sale un error en tu programa es mejor que nos digas el error exacto que te sale, así nos damos cuenta mas rapido y gracias por no confundirme con amigo.

Saluditos

lucho1981 13-11-2008 22:26:52

Gracias carito
 
Cita:

Empezado por Caro (Mensaje 325887)
Hola de nuevo, por lo que veo tu DNI debe ser de tipo Integer, para utilizar el like y sus comodines tienes que pasarle como String, no lo conviertas a entero.

Código Delphi [-]
 ParamByName ('plega').Value:=lega.Text+'%';

Nota.- Si te sale un error en tu programa es mejor que nos digas el error exacto que te sale, así nos damos cuenta mas rapido y gracias por no confundirme con amigo.

Saluditos

Gracias a vos carito por responder tan rapidamente y siempre tan acertada.
La proxima pondre el error q me sale, y disculpa nuevamente mi ignorancia.

Caro 14-11-2008 04:54:16

Cita:

Empezado por lucho1981 (Mensaje 325934)
Gracias a vos carito por responder tan rapidamente y siempre tan acertada.
..... y disculpa nuevamente mi ignorancia.

De nada, no te preocupes aquí iras aprendiendo mucho, como lo hemos hecho muchos de nosotros, incluida yo.

Saluditos

lucho1981 19-11-2008 18:09:33

Otra ves con problemas
 
Hola gente linda
Mi consulta esta ves es porq me da error (en tiempo de ejecución) cuando paso por parametros el caption de un label?

Código Delphi [-]
DM.TUsuarios.FieldByName('plega').value:=Principal.Lega.Caption;

Cuando hacia lo mismo con el text de un edit no me daba ese error.

Código Delphi [-]
DM.TUsuarios.FieldByName('plega').value:=Principal.Lega.Text;

Probe poniendole las comillas, pero es lo mismo.

Código Delphi [-]
DM.TUsuarios.FieldByName('plega').value:=Quotedstr(Principal.Lega.Caption;

Busque diferencia entre String de un caption y un Tstring de un text y la verdad no encontre ninguna respuesta concreta.
Me parece q los datos q envia el lega.text tienen q ser de otro tipo, pero no se de cual ni se pasarlos:(
Si alguien me hecha una manito se lo agradecere.

lucho1981 19-11-2008 18:45:28

Q gil q soy
 
Ya me di cuenta donde estaba el error.
Cuenta de poner
Código Delphi [-]
DM.TUsuarios.FieldByName('plega').value:=Principal.Lega.Caption;

Tenia q poner
Código Delphi [-]
ParamByName('plega').value:=Principal.Lega.Caption;

No se en q estaba pensando cuando lo escribia...jajaja.


La franja horaria es GMT +2. Ahora son las 01:17:51.

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