Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Filtrando un DBGrid con ADOTable (https://www.clubdelphi.com/foros/showthread.php?t=48857)

eddg 05-10-2007 19:16:03

Filtrando un DBGrid con ADOTable
 
Señores tengo mi ADOConnection1, ADOTable1, DataSource1, DBGrid1 y un Edit1.

Todo esta conectado a mi base de datos de MS Access...

La tabla tiene mas de 30 campos, pero solo muestro 2 en el DBGrid, entonces, quisiera Filtrar esos DOS Campos.

Uno es de Nombre y el otro es de Formula.

Quisiera tener un filtro tal que si tengo en la lista

maria, pedro, jimena, petra, carlos, dayana, etc...

y si colocara en el EDIT1 "ar", solo me mostrara en el DBGrid a

"maria, carlos". y los demas nombres desaparecieran del DBGrid

apliqué este código que vi en algun post de este foro:
________________________________________________

procedure Tcomponentes.Edit1Change(Sender: TObject);
begin
If (Edit1.text <> '') then
adotable1.Filter:= 'Nombre iupac Like '''+ Edit1.Text + '*''';
end;
_______________________________________________

Sin embargo no me filtra y el DBGrid queda intacto...

Que pueda ser lo q esta mal???

poliburro 05-10-2007 19:19:18

yo en lo personal, desaconsejo el uso de Filtros, pues son sumamente costosos para la aplicación. Lo mejor sería que usaras Una consulta con los criterios deseados para mostrar unicamente los registros concordantes.

Suerte

eddg 05-10-2007 19:22:59

como lo haria!
 
entonces. como le haria con los QUERY, soy nuevo en esto y apneas se trabajar con las tablas!


Como hacer para travajar con los QUERYS y los DBGrids????


Se agradece de antemano la valiosa colaboracion que puedan prestar...

Caral 05-10-2007 19:28:40

Hola
Aqui, vas a encontrar ejemplos cortos que coloque para vosotros.
Hay uno que se llama filtros y combobox, trabaja con access, en este veras varios tipos de filtro, desde combobox, edit, memo etc.
Baja el archivo, lo descomprimes, lo visualizas con delphi, le das doble click al adoconnection , buscas la tabla (biene en el zip) y lo corres, veras como te funciona.
Si tienes mas dudas, aqui estamos.
Saludos

Caral 05-10-2007 19:31:56

Hola
El ejemplo que te indique, (Uso de Combobox y Filtros), trabaja con adoquery, ya veras que es sencillo.
Saludos

eddg 05-10-2007 19:35:29

a Caral
 
Ok, entonces, dejame revisar y vere que tal? ok, gracias por la molestia!

enecumene 06-10-2007 01:37:27

Hombre he resuelto tu problema aqui te envio de nuevo tu codigo con los arreglos:

Archivo Adjunto 1031

Nota: en la base de datos debes juntar el nombre del campo NOMBRE IUPAC quedando NOMBREIUPAC y en el codigo debe estar en Mayuscula tal como esta en la base de datos.

espero que eso resuelva tu problema cualquier duda me lo comentas.

Saludos.

eddg 06-10-2007 02:37:05

Esta Buenisimo, me gusto que pudieras dar con la solución, sin embargo,

yo lo necesito es de la siguiente manera:

imaginemos que tenemos los siguientes Registros:

"mengano, panema, cara, mari, angel, uruguay, vida"

y que en el edit1, coloce, las LETRAS: "an". me mostrara a:

-Mengano, panema, angel y no sólo "angel".

Ojala me haya explicado? lo que hiciste esta bueno pero solo para las iniciales, lo que pasa es que mi base de datos tiene mas de 2000 registros, y al momento de filtrar tengo que hacerlo de la manera q te mencioné!!!

Ojala puedas Arreglarlo! man! gracias por la molestia!

Lepe 06-10-2007 13:28:31

Pon otro asterisco al principio, Así debe quedar el sql:
Código SQL [-]
where NOMBREIUPAC = '*ar*'

eddg 07-10-2007 17:00:22

este es el código que tengo:

Código Delphi [-]
procedure Tcomponentes.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ADOTable.Filtered := False;
      If RadioButton1.Checked = True then Filtro := 'NOMBRE_IUPAC Like ''' +Edit1.Text+ '*'''
         else If RadioButton2.Checked = True then Filtro := 'FORMULA_MOLECULAR Like '''  +Edit1.Text+   '*''';
      ADOTable.Filter := Filtro;
      ADOTable.Filtered := True;
   end
   else ADOTable.Filtered := False;
end;

No se donde dices tu que coloque ese ASTERISCO...

Por favor dime como lo solucionarias?

Atentamente EDDG, gracias de antemano!

Caral 07-10-2007 17:09:15

Hola
No estoy muy seguro pero interpretando lo que menciona Lepe siria algo asi:
Código Delphi [-]
 If RadioButton1.Checked = True then Filtro := 'NOMBRE_IUPAC Like ''''*' +Edit1.Text+ '*'''''
         else If RadioButton2.Checked = True then Filtro := 'FORMULA_MOLECULAR Like ''''*'  +Edit1.Text+   '*''''';
La idea del asterisco que tienes actualmente es decirle al filtro que traiga todo lo que sigue al edit:
Código Delphi [-]
Like '''  +Edit1.Text+   '*'''
La idea de Lepe seria todo lo anterior y lo posterior.
saludos

eddg 07-10-2007 17:25:33

observen el adjunto que dejo ENECUMENE en el post #7, alli esta mas ilustrado el problemita!

él lo hizo excelente, sin embargo lo necesito mas refinado, tal como lo explique!

Les pido un favor de revisar ese codigo, ya que hice lo q caral dijo pero me arroja un error! Observenlo y comenten

SAlud y éxitos!

Caral 07-10-2007 17:50:30

Hola
Como indique anteriormente, el uso de * en el edit hace lo que mencionaba Lepe.
Usando la logica de programacion y como soy un Novato lo tengo que hacer.
Se puede ver que lo que pretendes es hacer un filtro que sea mas profundo o que traiga pranticamente todas las semejanzas.
Bueno aqui lo tienes, espero que esto si sea lo que necesitas.
Saludos

Lepe 07-10-2007 19:03:05

Ya veo que Caral ha contestado antes. Solo un detalle, dejad de usar las comillas simples que eso marea mucho ;)

Código Delphi [-]
var campo :string;

   ADOTable.Filtered := False;
   If RadioButton1.Checked = True then Campo := 'NombreCliente Like '
   else If RadioButton2.Checked = True then Campo:= 'Telefono Like ' 
   ADOTable.Filter := Campo + QuotedStr('*' + Edit1.text + '*');
   ADOTable.Filtered := True;

Aunque tal y como dije en un mensaje anterior, creo que "Like" y "Filter" son incompatibles, si eso da error tendrás que usar un TADOQuery.

Saludos

Caral 07-10-2007 19:05:28

Hola
Impresionante, muy inteligente solucion.
Saludos

eddg 07-10-2007 20:59:28

Excelente AYuda señores, ahora sí funciona correctamente.

Un millón de Gracias....


La franja horaria es GMT +2. Ahora son las 16:01:05.

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