Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   filtrar registros en delphi (https://www.clubdelphi.com/foros/showthread.php?t=93366)

the walrus 23-08-2018 16:26:01

filtrar registros en delphi
 
estoy trabajando en un proyecto en delphi xe6 y componentes ADO y un libro excel como base de datos. como filtrar registros desde un edit y que el resultado lo muestre en un dbgrid

Casimiro Notevi 23-08-2018 19:12:43

¿Y cuál es el problema y la pregunta?

the walrus 23-08-2018 22:56:16

Cita:

Empezado por Casimiro Notevi (Mensaje 528157)
¿Y cuál es el problema y la pregunta?

mi pregunta es esta
¿como filtrar registros desde un edit y que el resultado lo muestre en un dbgrid?

y mi problema es este cuando compilo el codigo
"argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros "

mi codigo
Código Delphi [-]
DataSource1.DataSet.Close;
DataSource1.DataSet.Filter:= 'nombre like' + quotedstr(Edit1.Text + '%');
DataSource1.DataSet.Open;
DataSource1.DataSet.Filtered := true;

Caminante 23-08-2018 23:51:07

Cita:

Empezado por the walrus (Mensaje 528163)
Código Delphi [-]DataSource1.DataSet.Close; DataSource1.DataSet.Filter:= 'nombre like' + quotedstr(Edit1.Text + '%'); DataSource1.DataSet.Open; DataSource1.DataSet.Filtered := true;


Hola


Si va a usar la propiedad filter no es necesario cerrar el dataset (DataSet.Close) solamente asigna false a filtered antes de asignar el filtro (DataSet.Filtered := false).


Saludos

Casimiro Notevi 24-08-2018 00:56:56

¿Faltará un espacio tras el like?
like '

the walrus 24-08-2018 23:18:04

no funciona, utilice los dos metos

Casimiro Notevi 24-08-2018 23:23:59

Cita:

Empezado por the walrus (Mensaje 528163)
y mi problema es este cuando compilo el codigo

¿Cuándo compilas?

the walrus 24-08-2018 23:44:38

si, cuando compilo no hace la busqueda

Casimiro Notevi 24-08-2018 23:51:30

Cita:

Empezado por the walrus (Mensaje 528182)
si, cuando compilo no hace la busqueda

Es que cuando compila, no ejecuta. No busca cuando compila.
Creo que estás confundido con los conceptos. Tendrás que explicarnos más claramente las cosas.

the walrus 24-08-2018 23:59:52

Cita:

Empezado por Casimiro Notevi (Mensaje 528183)
Es que cuando compila, no ejecuta. No busca cuando compila.
Creo que estás confundido con los conceptos. Tendrás que explicarnos más claramente las cosas.

jajja bueno, el programa compila , cuando quiero hacer una busqueda no la realiza

ecfisa 25-08-2018 03:39:20

Hola.
Cita:

Empezado por the walrus (Mensaje 528163)
mi pregunta es esta
¿como filtrar registros desde un edit y que el resultado lo muestre en un dbgrid?

y mi problema es este cuando compilo el codigo
"argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros "

mi codigo
Código Delphi [-]
DataSource1.DataSet.Close;
DataSource1.DataSet.Filter:= 'nombre like' + quotedstr(Edit1.Text + '%');
DataSource1.DataSet.Open;
DataSource1.DataSet.Filtered := true;

Como te indicó Caminante, ese código no es correcto.

Del siguiente modo tendría que filtrar sin problemas:
Código Delphi [-]
...
var
  DS: TDataSet;
begin
  DS := DataSource1.DataSet;

  if not DS.Active then DS.Open;  (* Esta línea es innecesaria si el DataSet está activo *)

  DS.Filtered := False;
  DS.Filter   := 'NOMBRE LIKE ' + QuotedStr(Edit1.Text + '%');
  DS.Filtered := True;
end;

Saludos :)

the walrus 17-09-2018 21:19:59

Cita:

Empezado por ecfisa (Mensaje 528186)
Hola.

Como te indicó Caminante, ese código no es correcto.

Del siguiente modo tendría que filtrar sin problemas:
Código Delphi [-]
...
var
  DS: TDataSet;
begin
  DS := DataSource1.DataSet;

  if not DS.Active then DS.Open;  (* Esta línea es innecesaria si el DataSet está activo *)

  DS.Filtered := False;
  DS.Filter   := 'NOMBRE LIKE ' + QuotedStr(Edit1.Text + '%');
  DS.Filtered := True;
end;

Saludos :)

cuando realizo una búsqueda filtra pero cuando borro el filtro me aparce este error argumento incorrecto fuera de intervalos permitido o en conflictos con otros

ecfisa 17-09-2018 21:49:44

Hola.

Para orientarnos mejor sobre el problema, ¿ podrías poner la parte del código donde aplicas el filtro y la parte donde lo borras ?

Saludos :)

the walrus 17-09-2018 23:02:03

Cita:

Empezado por ecfisa (Mensaje 528456)
Hola.

Para orientarnos mejor sobre el problema, ¿ podrías poner la parte del código donde aplicas el filtro y la parte donde lo borras ?

Saludos :)

el codigo que utilizo es el mismo publicaste y con respecto de borrar el filtro me refiero cuando realizo una busqueda en el edit1 por ejemplo busco el registro con nombre 'pepe' realiza la búsqueda pero cuando borro por completo del edit1 me aparece el error que te comente antes.

ecfisa 18-09-2018 04:49:54

Hola.

Ahora entiendo..., podrías hacer:
Código Delphi [-]
...
var
  DS: TDataSet;
begin
  if Edit1.Text > '' then
  begin
    DS := DataSource1.DataSet;
    DS.Filtered := False;
    DS.Filter   := 'NOMBRE LIKE ' + QuotedStr(Edit1.Text + '%');
    DS.Filtered := True;
  end;  { ( opcional ) 
  else
    MessageBeep(MB_ICONERROR); }
end;

Saludos :)

the walrus 18-09-2018 15:09:11

lo pude solucionar de esta forma

Código Delphi [-]
ADOQuery1.Close;
    ADOQuery1.SQL.Text :='Select * FROM mitabla WHERE nombre like '+ QuotedStr(edit1.text+'%');
    ADOQuery1.Open;
    ADOQuery1.Filtered := true;

gracias por sus respuestas

Caminante 18-09-2018 16:03:30

Hola


Si vas a filtrar usando SQL ya no es necesario usar la propiedad filter.


Saludos

movorack 18-09-2018 18:04:58

Entonces validas si el edit tiene valor.

Código Delphi [-]
if Length(Trim(Edit.text)) > 0 then
begin
  //Acá aplicas el filtro como ya te explicaron
end
else
  Dataset.Filtered := False;

ecfisa 18-09-2018 18:24:02

Hola.
Cita:

Empezado por the walrus (Mensaje 528480)
lo pude solucionar de esta forma

Código Delphi [-]
ADOQuery1.Close;
    ADOQuery1.SQL.Text :='Select * FROM mitabla WHERE nombre like '+ QuotedStr(edit1.text+'%');
    ADOQuery1.Open;
    ADOQuery1.Filtered := true;

gracias por sus respuestas

En ese caso sería mejor que parametrices la consulta,
Código Delphi [-]
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'SELECT * FROM MITABLA WHERE NOMBRE LIKE :PARAM';
  ADOQuery1.Parameters.ParamByName('PARAM').Value := Edit1.Text + '%';
  ADOQuery1.Open;
para evitar la inyección SQL.

Saludos :)

the walrus 27-09-2018 01:37:30

Cita:

Empezado por ecfisa (Mensaje 528466)
Hola.

Ahora entiendo..., podrías hacer:
Código Delphi [-]
...
var
  DS: TDataSet;
begin
  if Edit1.Text > '' then
  begin
    DS := DataSource1.DataSet;
    DS.Filtered := False;
    DS.Filter   := 'NOMBRE LIKE ' + QuotedStr(Edit1.Text + '%');
    DS.Filtered := True;
  end;  { ( opcional ) 
  else
    MessageBeep(MB_ICONERROR); }
end;

Saludos :)

tengo una duda tdataset es un adodataset


La franja horaria es GMT +2. Ahora son las 11:26:39.

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