Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Thumbs down 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.
Responder Con Cita
  #2  
Antiguo 13-11-2008
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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+'%');
Responder Con Cita
  #3  
Antiguo 13-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Smile Muchas gracias

Cita:
Empezado por olbeup Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Exclamation 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
Responder Con Cita
  #6  
Antiguo 13-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Thumbs up Muchas gracias

Cita:
Empezado por Caro Ver Mensaje
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.

Saluditos
Responder Con Cita
  #8  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Thumbs down 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.
Responder Con Cita
  #9  
Antiguo 13-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 13-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Smile Gracias carito

Cita:
Empezado por Caro Ver Mensaje
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.
Responder Con Cita
  #11  
Antiguo 14-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por lucho1981 Ver Mensaje
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #12  
Antiguo 19-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Thumbs down 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.
Responder Con Cita
  #13  
Antiguo 19-11-2008
lucho1981 lucho1981 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Tucuman-Argentina
Posts: 44
Poder: 0
lucho1981 Va por buen camino
Thumbs up 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.
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
como mostrar una ventana con base al resultado de una busqueda Nelly Varios 3 02-02-2006 18:16:20
Validar datos MaskEdit Arkaz Varios 2 06-11-2005 22:57:03
Busqueda en base de access jjgongora Conexión con bases de datos 3 13-10-2005 18:27:13
Busqueda En Base de Datos Supermagayin Conexión con bases de datos 1 12-11-2003 22:32:12
busqueda en base de datos luigi Conexión con bases de datos 3 16-07-2003 02:36:45


La franja horaria es GMT +2. Ahora son las 01:41:36.


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