Ir al contenido


Foto

Consulta usando keypress


  • Por favor identifícate para responder
9 respuestas en este tema

#1 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 octubre 2011 - 11:37

saludos compañeros

tengo una duda con respecto a realizar una consulta en forma de búsqueda, y es que en esta tabla que tengo 5,000 registros escritos con 5,000 numeros deseo que al escribir cualquier número en el Edit1, se realiza la búsqueda y del numero digitado, con solo presionar la cantidad que se quiere buscar....

hice esto pero no me funciona, en el evento ONKEYPRESS:


delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4. consulta:='SELECT * FROM clientes WHERE No LIKE''';
  5. consulta:=consulta +'%';
  6. consulta:=consulta + edit1.Text;
  7. consulta:=consulta +'%';
  8. consulta:=consulta +'''';
  9. ADOQuery3.SQL.Clear;
  10. ADOQuery3.SQL.Add(consulta);
  11. ADOQuery3.Active:=True;
  12. ADOQuery3.close;
  13. ADOQuery3.Open;
  14.  
  15. end;




Archivos adjuntos


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 octubre 2011 - 11:46

Eso es porque no le estas diciendo a cual tecla debe activar la busqueda, deberia ser:



delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4.  
  5. if key = '#13' then begin //tecla ENTER
  6. consulta:='SELECT * FROM clientes WHERE No LIKE''';
  7. consulta:=consulta +'%';
  8. consulta:=consulta + edit1.Text;
  9. consulta:=consulta +'%';
  10. consulta:=consulta +'''';
  11. ADOQuery3.SQL.Clear;
  12. ADOQuery3.SQL.Add(consulta);
  13. ADOQuery3.Active:=True;
  14. ADOQuery3.close;
  15. ADOQuery3.Open;
  16. end;
  17. end;



Saludos

  • 0

#3 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 octubre 2011 - 12:00

Eso es porque no le estas diciendo a cual tecla debe activar la busqueda, deberia ser:



delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4.  
  5. if key = '#13' then begin //tecla ENTER
  6. consulta:='SELECT * FROM clientes WHERE No LIKE''';
  7. consulta:=consulta +'%';
  8. consulta:=consulta + edit1.Text;
  9. consulta:=consulta +'%';
  10. consulta:=consulta +'''';
  11. ADOQuery3.SQL.Clear;
  12. ADOQuery3.SQL.Add(consulta);
  13. ADOQuery3.Active:=True;
  14. ADOQuery3.close;
  15. ADOQuery3.Open;
  16. end;
  17. end;



Saludos



no hace nada, no funcionó !
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 octubre 2011 - 12:04

Pues veo algo mal, deberia ser asi:



delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4.  
  5. if key = '#13' then begin //tecla ENTER
  6. consulta := 'SELECT * FROM clientes WHERE No LIKE ''*' + edit1.txt +'*''';
  7. ADOQuery3.close;
  8. ADOQuery3.SQL.Clear;
  9. ADOQuery3.SQL.Add(consulta);
  10. ADOQuery3.Open;
  11. end;
  12. end;



Intenta ahora.

Saludos.

EDITO: He modificado el Codigo para menos lineas y algunos bugs que vi por ahi :D
  • 0

#5 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 octubre 2011 - 12:09

Pues veo algo mal, deberia ser asi:



delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4.  
  5. if key = '#13' then begin //tecla ENTER
  6. consulta:='SELECT * FROM clientes WHERE No LIKE''';
  7. consulta:=consulta +'%';
  8. consulta:=consulta + edit1.Text;
  9. consulta:=consulta +'%';
  10. consulta:=consulta +'''';
  11. ADOQuery3.close;
  12. ADOQuery3.SQL.Clear;
  13. ADOQuery3.SQL.Add(consulta);
  14. ADOQuery3.Open;
  15. end;
  16. end;



Intenta ahora.

Saludos.


nada, no funciona
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 octubre 2011 - 12:10

He editado el codigo de nuevo, porque mirando he visto unos bugs, intentalo de nuevo.

Saludos.

  • 0

#7 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 octubre 2011 - 12:18

Pues veo algo mal, deberia ser asi:



delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. Var consulta:string;
  3. begin
  4.  
  5. if key = '#13' then begin //tecla ENTER
  6. consulta := 'SELECT * FROM clientes WHERE No LIKE ''*' + edit1.txt +'*''';
  7. ADOQuery3.close;
  8. ADOQuery3.SQL.Clear;
  9. ADOQuery3.SQL.Add(consulta);
  10. ADOQuery3.Open;
  11. end;
  12. end;



Intenta ahora.

Saludos.

EDITO: He modificado el Codigo para menos lineas y algunos bugs que vi por ahi


ups ! no se que pasa no funciona ! tengo el ADOquery3 conectado al ADOconnection1 en su propiedad correspondiente  :undecided:
  • 0

#8 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 26 octubre 2011 - 12:48

¿Donde querrias ver algo?

Supongo que el grid de la pantalla que envias esta conectado con el adoquery3 del codigo, si no es asi, no se veria nada, pero si esta conectado, deberian desaparecer los registros de la captura y quedar solo los que cumplan el "where".

Si pones un punto de ruptura en el codigo del keypress, dentor del if del intro, donde modificas la sql ¿se para o no el programa? Esto es importante.

Cuentanos, si pasa por ese punto, que ocurre a continuacion, si el grid se vacia, se queda como estaba, etc.
  • 0

#9 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 octubre 2011 - 02:36

¿Donde querrias ver algo?

Supongo que el grid de la pantalla que envias esta conectado con el adoquery3 del codigo, si no es asi, no se veria nada, pero si esta conectado, deberian desaparecer los registros de la captura y quedar solo los que cumplan el "where".

Si pones un punto de ruptura en el codigo del keypress, dentor del if del intro, donde modificas la sql ¿se para o no el programa? Esto es importante.

Cuentanos, si pasa por ese punto, que ocurre a continuacion, si el grid se vacia, se queda como estaba, etc.


- El ADOquery1 en el boton limpiar, borra con un DELETE todos los registros y el ADOquery2 en el boton Borrar borra los registros en el archivo .LOG....

- El adotable1 lo uso para generar y escribir los registros desde el 1 hasta (x) numero...con un bucle for...

- Con el ADOquery3 es que necesito que el dbgrid haga la consulta de buscar el numero indicado entre los registrados, pero sin necesidad presionar 'ENTER' solo que se digite el numero y lo muestre...

Lo he intentado también con 'Locate' pero me da error:



delphi
  1. ADOTable1.Locate('No',Edit1.Text,[loCaseInsensitive,loPartialKey])



Este adotable esta conectado a la unica tabla de BD llamada 'clientes'
El campo 'No' es el que se llena con los registros escritos por numeros..

Archivos adjuntos


  • 0

#10 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 27 octubre 2011 - 07:29

Sigo sin saber si el adoquery3 esta o noconectado al dbgrid, y sin saber que ocurre cuando ahora tecleas un numero y pulsas enter...

Un grid no busca nada, solo muestra la lista de valores, si quieres buscar, puedes bien modificar el query del grid para que solo muestre algunos (que parece que es lo que intentas), o localizarlo con otro query y mostrarlo en otro sitio que no sea el grid... o dejar el grid cmo esta pero seleccionando el registro que tu buscas ¿cual es tu caso?

Es decir, si funcionase bien ¿que ocurriria en pantalla al escribir un numero ?
  • 0




IP.Board spam blocked by CleanTalk.