Ver la Versión Completa : filtrar registros en delphi
the walrus
23-08-2018, 16:26:01
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
¿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
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
Código Delphi [-] (http://www.clubdelphi.com/foros/#)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
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
si, cuando compilo no hace la busquedaEs 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
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.
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
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:
...
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
Hola.
Como te indicó Caminante, ese código no es correcto.
Del siguiente modo tendría que filtrar sin problemas:
...
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
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:
...
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
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.
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.
lo pude solucionar de esta forma
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,
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 (https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL).
Saludos :)
the walrus
27-09-2018, 01:37:30
Hola.
Ahora entiendo..., podrías hacer:
...
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
ecfisa
27-09-2018, 03:30:16
Hola.
tengo una duda tdataset es un adodataset
TDataSet es la clase base para todos los componentes de acceso a datos: TDataSet (https://www.freepascal.org/docs-html/fcl/db/tdataset.html).
Es decir que cualquiera (o todas) de las siguientes asignaciones son válidas:
...
var
DS : TDataSet;
begin
// BDE
DS := Query1;
DS := Table1;
// ADO
DS := ADOQuery1;
DS := ADOTable1;
// IBX
DS := IBQuery1;
DS := IBDataSet1;
// dbExpress
DS := SQLQuery1;
DS := SQLTable1;
...
Saludos :)
Casimiro Notevi
27-09-2018, 10:04:22
Más claro, imposible ^\||/
ElDioni
27-09-2018, 15:57:57
Hola,
en otro hilo ya se estuvo comentando como hacer consultas a los datos de una hoja excel. Puede que el filter te funcione si lo cambias y lo pones de la siguiente manera.
Adoquery1.Filtered:=false;
Adoquery1.Filter:='[Hoja1$].[Nombre] LIKE '+quotedstr(Edit1.Text+'%');
Adoquery1.Filtered:=true;
Saludos.
the walrus
28-09-2018, 01:43:31
Hola.
TDataSet es la clase base para todos los componentes de acceso a datos: TDataSet (https://www.freepascal.org/docs-html/fcl/db/tdataset.html).
Es decir que cualquiera (o todas) de las siguientes asignaciones son válidas:
...
var
DS : TDataSet;
begin
// BDE
DS := Query1;
DS := Table1;
// ADO
DS := ADOQuery1;
DS := ADOTable1;
// IBX
DS := IBQuery1;
DS := IBDataSet1;
// dbExpress
DS := SQLQuery1;
DS := SQLTable1;
...
Saludos :)
si, gracias por el concepto y el material
tengo un pequeño problema se trata de filtrar registros mi problema es el siguiente cuando escribo una letra en el edit1 por ejemplo la letra 'c' me muestra los registros con la letra c pero cuando borro la letra del edit1 la grilla no me muestra todos los registros el código que uso es este
begin
if Edit1.Text > '' then
begin
datasource.DataSet.Filtered := false;
datasource.DataSet.Filter := 'nombre like '+ QuotedStr(edit1.text+'%');
datasource.DataSet.Filtered := true;
end;
end;
en este caso estoy intentando filtrar registros de tres tablas
Más claro, imposible ^\||/
(y)
Hola,
en otro hilo ya se estuvo comentando como hacer consultas a los datos de una hoja excel. Puede que el filter te funcione si lo cambias y lo pones de la siguiente manera.
Adoquery1.Filtered:=false;
Adoquery1.Filter:='[Hoja1$].[Nombre] LIKE '+quotedstr(Edit1.Text+'%');
Adoquery1.Filtered:=true;
Saludos.
cambie de gestor de base de datos ahora uso MS ACCESS
Casimiro Notevi
28-09-2018, 09:35:31
A ver si te aclaras.
ElDioni
28-09-2018, 15:00:47
si, gracias por el concepto y el material
tengo un pequeño problema se trata de filtrar registros mi problema es el siguiente cuando escribo una letra en el edit1 por ejemplo la letra 'c' me muestra los registros con la letra c pero cuando borro la letra del edit1 la grilla no me muestra todos los registros el código que uso es este
begin
if Edit1.Text <> '' then
begin
datasource.DataSet.Filtered := false;
datasource.DataSet.Filter := 'nombre like '+ QuotedStr(edit1.text+'%');
datasource.DataSet.Filtered := true;
end;
end;
en este caso estoy intentando filtrar registros de tres tablas
(y)
cambie de gestor de base de datos ahora uso MS ACCESS
Para que te vuelva a mostrar todos los registros:
datasource.DataSet.Filtered := false;
if Edit1.Text <> '' then
begin
datasource.DataSet.Filter := 'nombre like '+ QuotedStr(edit1.text+'%');
datasource.DataSet.Filtered := true;
end;
Casimiro Notevi
28-09-2018, 17:29:48
Buena aclaración :)
the walrus
01-10-2018, 23:00:12
funciono gracias por su ayuda
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.