Ver la Versión Completa : Búsquedas a través de TTable
fpirovani
11-02-2008, 14:35:28
holaaaa q tal?
Estoy necesitando filtrar registros de una tabla, Pero al intentar aplicar el filtro me de un error.
Yo lo estoy haciendo de esta forma: (este ejemplo lo encontre en el foro, igualmente yo ya lo estaba haciendo de esta forma)
procedure TForm1.EFiltroChange(Sender: TObject);
begin
if not (EFiltro.text = '') then
begin
DM.TTable.Filtered := False;
DM.TTable.Filter := '' + 'CAMPO' + ' Like ' + QuotedStr(EFiltro.text + '%')
DM.TTable.Filtered := True;
end
else
DM.TTable.Filtered := False;
end;
En mi base de datos el campo que quiero filtrar se llama NOMBRE, y suponiendo que en el edit escribo el texto: Ce
Me da el mensaje: Clientes field 'Ce' not found (la tabla se llama Clientes)
Segun lo q veo, esta tomando como nombre del campo el texto q escribo en el Edit.
Se les ocure en que le puedo estar errando?
ahaha, por si no se an dado cuenta, soy re principiante en esto.
felipe88
11-02-2008, 14:46:42
Hola bienvenido ya leiste la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) ?
Deberias ser un poco mas explicito en tu problema... cual es el error, que moto de BD tienes...
Seria mas facil asi para poderte ayudar, no crees...
Saludos
enecumene
11-02-2008, 15:11:00
Prueba de esta manera:
procedure TForm1.EFiltroChange(Sender: TObject);
begin
if not (EFiltro.text = '') then
begin
DM.TTable.Filtered := False;
DM.TTable.Filter := 'Clientes Like ''' + EFiltro.Text + '*''';
DM.TTable.Filtered := True;
end
else
DM.TTable.Filtered := False;
end;
Saludos.
Chris
11-02-2008, 15:41:52
Prueba de esta manera:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TForm1.EFiltroChange(Sender: TObject);
begin if not (EFiltro.text = '') then begin DM.TTable.Filtered := False; DM.TTable.Filter := 'Clientes Like ''' + EFiltro.Text + '*'''; DM.TTable.Filtered := True; end else DM.TTable.Filtered := False; end;
Saludos.
A como sutilmente lo dice el compañero enecumene, el error puede radicar en los caracteres comodines que se utilizan, Algunos utilizan * y ? y otros como firebird utilizan el % que es tu caso según veo en tu actual código. De todos modos fpirovani (http://www.clubdelphi.com/foros/member.php?u=26084), repito lo que dijo felipe, es necesario, saber cuál es el motor de datos que estás utilizando.
Saludos.
fpirovani
12-02-2008, 03:55:28
A como sutilmente lo dice el compañero enecumene, el error puede radicar en los caracteres comodines que se utilizan, Algunos utilizan * y ? y otros como firebird utilizan el % que es tu caso según veo en tu actual código. De todos modos fpirovani (http://www.clubdelphi.com/foros/member.php?u=26084), repito lo que dijo felipe, es necesario, saber cuál es el motor de datos que estás utilizando.
Saludos.
Disculpen q no me sepa explicar bien, es q recien estoy arrancando en eso, y no tengo mucha idea.
Buscando en la ayuda encontre esto sobre TDataSet.Filter: Field comparisons are not supported against local tables (Paradox, dBASE, Access, FoxPro).
Y cuando yo cree la tabla Clientes, (tabla esta bien dicho?) la cree como Paradox 7.
Voy a tener q cambiar a otro tipo de "tabla" (no se si esta bien dicho)
Que me recomiendan ustedes?
Desde ya muchas gracias! y espero pronto ponerme a tono con la terminologia y demas cosas.
Chris
12-02-2008, 16:44:42
... Buscando en la ayuda encontre esto sobre TDataSet.Filter: Field comparisons are not supported against local tables (Paradox, dBASE, Access, FoxPro).
y demas cosas...
Lo que dice la ayuda se refiere a comparaciones directas entre campos, por ej.
Campo1 > Campo2
Según viendo la ayuda en delphi tu código debería de quedar de esta forma:
DM.Table.Filter := 'CAMPO = ' quotedStr(EFiltro.Text + '*');
¿Cómo hacer para que esto funcione? Bien, la ayuda de delphi dice los siguiente:
wildcard for partial comparisons (FilterOptions must include foPartialCompare)
Saludos.
fpirovani
12-02-2008, 20:59:16
Lo que dice la ayuda se refiere a comparaciones directas entre campos, por ej.
Según viendo la ayuda en delphi tu código debería de quedar de esta forma:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)
DM.Table.Filter := 'CAMPO = ' quotedStr(EFiltro.Text + '*');
¿Cómo hacer para que esto funcione? Bien, la ayuda de delphi dice los siguiente:
Saludos.
Probe de la forma que me dijiste, y tampoco me funciona. Ahora no me da error, pero no encuentra nada.
La verdad q se m acabaron las ideas, no deberia ser algon tan complicado.
Les explico lo que estoy haciendo:
Tengo una tabla de la cual quiero filtrar registros segun el texto que el usuario vaya ingresando en un edit. La taba se llama T_Clientes y el campo sobre el que quiero aplicar el filtro de llama Ape_Nom.
En el evento OnChange del edit tengo el siguiente codigo:
T_Clientes.Filtered := False;
T_Clientes.Filter := 'Ape_Nom = ' + quotedStr(EFiltro.Text+ '*');
T_Clientes.Filtered := True;
Cuando escribo cualquier cosa en el edit, directamente no me muestra nada.
Por ejemplo: si en el edit escribo la letra J, en el TDBGrid me tendria q mostrar los registros en los cuales el campo Ape_Nom comienzan con J (Jose, Juan, etc...) pero directamente me desaparecen todos los registros.
Espero que se entienda lo que quise decir.
Saludos a todos, y desde ya muchas gracias!
enecumene
12-02-2008, 21:07:21
deberia ser asi:
T_Clientes.Filtered := False;
T_Clientes.Filter := 'Ape_Nom Like ''' +EFiltro.Text+ '*''');
T_Clientes.Filtered := True;
Saludos.
Chris
12-02-2008, 21:31:14
fpirovani (http://www.clubdelphi.com/foros/member.php?u=26084), podrías postear el tipo y el mensaje del error. Los msg de errores no se inventaron solo para decir "hay un problema" sino también para ayudarte a resolverlo.
Saludos.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.