Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Búsquedas a través de TTable (https://www.clubdelphi.com/foros/showthread.php?t=53112)

fpirovani 11-02-2008 14:35:28

Búsquedas a través de TTable
 
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)
Código Delphi [-]
 
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 ?
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:

Código Delphi [-]
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

Cita:

Empezado por enecumene (Mensaje 264880)
Prueba de esta manera:

Código Delphi [-]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, 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

Cita:

Empezado por D&W (Mensaje 264886)
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, 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

Cita:

Empezado por fpirovani (Mensaje 265129)
... 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.
Cita:

Campo1 > Campo2
Según viendo la ayuda en delphi tu código debería de quedar de esta forma:
Código Delphi [-]
DM.Table.Filter := 'CAMPO = ' quotedStr(EFiltro.Text + '*');
¿Cómo hacer para que esto funcione? Bien, la ayuda de delphi dice los siguiente:
Cita:

wildcard for partial comparisons (FilterOptions must include foPartialCompare)
Saludos.

fpirovani 12-02-2008 20:59:16

Cita:

Empezado por D&W (Mensaje 265232)
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 [-]
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:

Código Delphi [-]
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, 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.


La franja horaria es GMT +2. Ahora son las 08:46:30.

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