PDA

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.