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)
-   -   filtrar por longitud de campo (https://www.clubdelphi.com/foros/showthread.php?t=77728)

Vlady 22-02-2012 17:54:18

filtrar por longitud de campo
 
Hola amigos del club delphi quisiera saber sis es posible filtrar en un clientdataset por la longitud de un campo tal vez utilizando un la funcion length. Yo utilizo la funcion char_length al realizar la consulta SQL pero para filter no me funciona, que otra opción puede existir?

Casimiro Notevi 22-02-2012 18:32:20

¿Puedes poner el fuente?

Vlady 22-02-2012 20:18:31

Código Delphi [-]
    CDSBTabla.Filter := 'length(CUENTA) <=  '  + intTostr(Edi1.Text);
    CDSBTabla.Filtered := True;

Esto es lo que tengo pero no me funciona donde edit1.Text es un entero

oscarac 22-02-2012 20:28:11

estas usando un numero (LENGTH) con un caracter inttoSTR()
cuidado con eso
osea...

3 = '3'

roman 22-02-2012 20:40:37

Pues no, de hecho es correcto su uso de IntToStr, ya que la cadena resultante sería:

Código Delphi [-]
DSBTabla.Filter := 'length(CUENTA) <=  ' + '3';

o sea

Código Delphi [-]
DSBTabla.Filter := 'length(CUENTA) <=  3';

En caso de que no se pueda usar una función en la expresión del Filter siempre queda la posibilidad de usar el evento OnFilterRecord del dataset en el que puede ponerse casi cualquier condición de filtrado.

// Saludos

ecfisa 22-02-2012 20:52:11

Hola Vlady.

Hacer esa comparación desde la propiedad Filter no lo veo viable, pero sí desde el evento OnFilterRecord:

Código Delphi [-]
procedure TForm1.CDSBTablaFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
  N: Integer;
begin
  if TryStrToInt(Edit1.Text, N) then
    Accept:= Length(CDSBTabla.FieldByName('CUENTA').AsString) <= N;
end;

Llamada ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   CDSBTabla.Filtered:= False;
   CDSBTabla.Filtered:= True;
end;

Saludos.

Edito: Luego de poner el ejemplo veo que yá roman había mencionado esta posibilidad. ;) :)

Vlady 22-02-2012 21:02:29

excelente mil gracias

Al González 22-02-2012 21:20:33

Comparto lo dicho por Román, y también lo dicho por ecfisa, pero sí es viable usar la propiedad Filter:

Código Delphi [-]
CDSBTabla.Filter := 'Substring (CUENTA, 1, ' + IntToStr (Edi1.Text) + ') = CUENTA';
CDSBTabla.Filtered := True;

Un filtrado abrazo.

Al González. :)


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

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