Hola enecumene,
¿Tal vez asi?
Código Delphi
[-]procedure TForm1.Edit1Change(Sender: TObject);
var Filtro: string;
begin
Filtro := '';
if (Edit1.Text <> '')
then begin
Table1.Filtered := False;
if ComboBox1.Text = 'Pedido'
then Filtro := 'no_ped Like ''' +Edit1.Text+ '*''';
if ComboBox1.Text = 'Trámite'
then Filtro := 'tramite_no Like ''' +Edit1.Text+ '*''';
if ComboBox1.Text = 'Orden de Compra'
then begin
Filtro := 'oc_no_sigef1 Like ''' +Edit1.Text+ '*'' OR';
Filtro := Filtro + 'oc_no_sigef2 Like ''' +Edit1.Text+ '*'' OR';
Filtro := Filtro + 'oc_no_sigef3 Like ''' +Edit1.Text+ '*''';
end;
if ComboBox1.Text = 'Carta Orden'
then begin
Filtro := 'co1 Like ''' +Edit1.Text+ '*'' OR';
Filtro := Filtro + 'co2 Like ''' +Edit1.Text+ '*'' OR';
Filtro := Filtro + 'co3 Like ''' +Edit1.Text+ '*'' OR';
Filtro := Filtro + 'co4 Like ''' +Edit1.Text+ '*''';
end;
if ComboBox1.Text = 'Status'
then Filtro := 'status Like ''' +Edit1.Text+ '*''';
Table1.Filter := Filtro;
Table1.Filtered := true;
end
else Table1.Filtered := False;
end;
Si no te molesta... tengo algunas dudas con respecto a esta forma de anidar varios IF. Por lo menos a mi me resulta un poco molesto estar haciendo tantos anidamientos. Si se que la condición siempre se va a cumplir en algunos de ellos directamente pregunto por la parte verdadera (THEN)... total... no importa que siga evaluando, de cualquier manera en un IF entra y se cumple. Esto me evita a mi el molestoso "escalonado".
Por otro lado, el Filter está hecho para condiciones simples. Y Encadenar varias condiciones en el (como las del tipo Orden Compra) es forzar demasiado al componente.
Yo, en tu caso consideraría el uso de Querys. Por que:
1. Puedes de entrada traer solo lo necesario y te evitas cargar en memoria toda la tabla (algo que hace el TTable).
2. El uso de Query es más rápido.
3. Puedes hacer consultas de muy variadas formas. es más flexible que el TTable.
Saludos,