Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tabla Zeos (https://www.clubdelphi.com/foros/showthread.php?t=70476)

cmfab 22-10-2010 20:48:47

Tabla Zeos
 
Hola de nuevo a todos.

Alguien puede ayudarme. necesito establecer un filtro a una tabla en la propiedad Filter de Ztable. pero resulta que el campo que deseo filtrar es de tipo texto y no logro conseguir el operador like para que me filtre por ejemplo todos los nombres "Pedro". muchas gracias

movorack 22-10-2010 21:07:50

Hola,

Podrias pasar un poco del código que usas para establecer el filtro?

Así medio a ciegas, te puedo decir que para establecer un filtro deberás usar algo así:

Código Delphi [-]
  //FilterData es la variable o el texto que vas a filtrar
  //Los % son comodines. en este caso buscara tanto a Pedro fernandez como a San Pedro o PedroNel
  //Los UpperCase son para evitar problemas con la sensibilidad a mayusculas
  ZTable.Filter := UpperCase('campo')+' like '+QuotedStr('%'+UpperCase(FilterData)+'%');

  //Recuerda que debes tener el filtro activo
  ZTable.Filtered := True;

Ahhh y echale una miradita a la Guia de estilo ;)

cmfab 22-10-2010 21:22:03

Gracias por la respuesta pero especificamente imprimo en pantalla el filter de mi tabla Zeos

por ejemplo NOMBRE like '%PEDRO%'

todo parece estar bien y no me devuelve ningun registro. incluso lo probé con el codigo recomendado y sigue todo igual. la propiedad filtered está True

saludos

roman 22-10-2010 21:42:02

Que yo sepa, no puedes usar LIKE en un filtro. Puedes usar un comodín * pero incluso eso tiene limitaciones. Por ejemplo, puedes poner

Código:

nombre='perez*'
pero no

Código:

nombre='*perez'
Al menos así pasa con Paradox, pero creo que el mecanismo de filtrado es igual para cualquier DataSet, o por lo menos la ayuda no indica que cada descendiente implemente su propio mecanismo.

// Saludos

Caral 22-10-2010 21:49:43

Hola
Roman, ahora si me pusiste a dudar.
Esto no es un filtro?
Código Delphi [-]
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ATClientes.Filtered := False;
      If CBFiltro.Text = 'Código' then Filtro := 'CodCliente Like '+Edit1.Text
         else If CBFiltro.Text = 'Nombre' then Filtro := 'NombreCliente Like '''+ Edit1.Text + '*'''
            else If CBFiltro.Text = 'Teléfono' then Filtro := 'Telefono Like '''+ Edit1.Text + '*''';
      ATClientes.Filter := Filtro;
      ATClientes.Filtered := True
   end
   else ATClientes.Filtered := False;
Por que es lo que hago en un table y tiene el like, ademas funciona.:)
Saludos

cmfab 22-10-2010 22:19:56

Vale el codigo de Caral funciona perectamente

Gracias a todos

roman 22-10-2010 22:26:05

Tienes razón Caral. Se ve entonces que sí depende de la base.

// Saludos

movorack 22-10-2010 22:48:45

por si la duda... los asteriscos NO me funcionan como comodín en PostgreSQL :D.

Por razón de costumbre usé el porcentaje % en el ejemplo.

Caral 22-10-2010 23:09:53

Hola
El codigo del filtro funciona bien en access
Para usarlo en firebird hay que cambiar los asteriscos (*) por porcentaje (%), lo demas es igual.
Ademas solo para campos text, los numéricos no lo necesitan.
No lo se para otras bd.
Saludos

Al González 24-10-2010 08:36:46

Además de lo dicho, cabe mencionar que el componente TIBTable emplea el valor dado a la propiedad Filter como condición Where SQL.

Es decir, puede utilizarse un TIBTable con su propiedades Filter y Filtered establecidas antes de abrirlo, y la traída de registros del servidor será tan eficiente como la de un TIBQuery, ya que el TIBTable ejecutará realmente una consulta SQL de tipo:

Código SQL [-]
Select * From Tabla Where PropiedadFilter

Algo muy distinto a lo que hacen otros componentes table, donde lo normal es traer a memoria todos los registros de una tabla y luego hacer invisibles a los que no cumplan con los criterios del filtro. Razón por la cual los componentes tabla han sido estigmatizados como "no recomendables".

Desconozco cómo es esto en un TZTable de ZeosLib, aunque no sería muy difícil averiguarlo.

Saludos en el servidor.

Al González. :)
P.D. No me pregunten qué hago aquí un domingo a la 1:15 AM. :D

Casimiro Noteví 24-10-2010 13:32:56

Cita:

Empezado por Al González (Mensaje 380265)
P.D. No me pregunten qué hago aquí un domingo a la 1:15 AM. :D

No, no lo preguntaremos, por si acaso :)


La franja horaria es GMT +2. Ahora son las 00:45:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi