Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Dataset.Filter (https://www.clubdelphi.com/foros/showthread.php?t=94105)

donpedro 05-08-2019 17:07:10

Ayuda con Dataset.Filter
 
Buenas, bendiciones para todos

Estoy utilizando DElphi 2009 y Sql server. Estoy usando DBEDIT con ADO. En un modulo de registro de pacientes tengo un EDIT para hacer una busqueda. Quiero filtrar el dataset para que en el mismo EDIT se pueda buscar por id, nombres, apellidos o cedula.

Estoy utilizando el siguiente codigo, pero me esta dando error:

Código Delphi [-]
       if Length(Trim(Ebuscapacientes.text)) > 0 then
begin
       DSpacientes.DataSet.Filtered:=false;
       DSpacientes.dataset.Filter := '[nombres] like '+''''+'%'+Ebuscapacientes.Text+'%'+'''' or '[apellidos] like '+''''+'%'+Ebuscapacientes.Text+'%'+'''';
       DSpacientes.DataSet.Filtered :=true;
end
else
       DSpacientes.Dataset.Filtered := False;

Espero que me puedan ayudar. Gracias de antemano

movorack 05-08-2019 17:21:40

Y... ¿que error genera?

donpedro 05-08-2019 17:29:13

Ese es el error

[DCC Error] Upacientes.pas(298): E2015 Operator not applicable to this operand type

movorack 05-08-2019 17:37:58

El OR debería ser parte de la cadena.

Trata de hacer la cadena mas fácil de manejar, tal vez puedas usar format:

Código Delphi [-]
  DSpacientes.dataset.Filter := '';
  if not Trim(Ebuscapacientes.Text).IsEmpty then
    DSpacientes.dataset.Filter := Format('([nombres] like ''%%%0:s%%'') or ([apellidos] like ''%%%:0s%%'') or ([cedula] like ''%%%:0s%%'')', [Trim(Ebuscapacientes.text)]);

donpedro 05-08-2019 17:40:33

A que clase pertenece isEMpty. Porque me da error

movorack 05-08-2019 17:45:55

Debe ser que usas una versión anterior de Delphi.

isEmpty es una función en el helper del tipo de dato String. Es parte de la VCL desde XE3 en adelante (creo)

Código Delphi [-]
Trim(Ebuscapacientes.text).isEmpty = Length(Trim(Ebuscapacientes.text)) = 0

Edito: Si,ya leí que usas Delphi 2009

donpedro 05-08-2019 18:17:24

Gracias Movorack, me sirvio de mucho.

Asi quedo el codigo de manera funcional

Código Delphi [-]
 if Length(Trim(Ebuscapacientes.text)) >0 then
  begin
  DSpacientes.dataset.Filter := Format('([nombres] like ''%%%0:s%%'') or ([apellidos] like ''%%%:0s%%'') or ([numero documento] like ''%%%:0s%%'')', [Trim(Ebuscapacientes.text)]);
   DSpacientes.DataSet.Filtered :=true;

  end
  else
    DSpacientes.Dataset.Filtered := False;

end;

donpedro 05-08-2019 18:22:03

Un detalle se me olvido

Tengo el campo ID int identity en la base de datos, y cuando agrego ese campo en la busqueda me da un error. El error dice: No se puede abrir el filtro

Que puedo hacer ahi??? y disculpa

oscarac 05-08-2019 23:20:39

creo que el tema de filtros en algun momento se podria lento dependiendo de la cantidad de registros de la tabla

en su lugar porque no utilizas un query para extraer los registros que deseas?

movorack 06-08-2019 00:25:02

Cita:

Empezado por donpedro (Mensaje 533037)
Un detalle se me olvido

Tengo el campo ID int identity en la base de datos, y cuando agrego ese campo en la busqueda me da un error. El error dice: No se puede abrir el filtro

Que puedo hacer ahi??? y disculpa

Debes revisar bien la forma en que armas los filtros con el tipo de dato que deseas filtrar.

movorack 06-08-2019 00:25:56

Cita:

Empezado por oscarac (Mensaje 533050)
creo que el tema de filtros en algun momento se podria lento dependiendo de la cantidad de registros de la tabla

en su lugar porque no utilizas un query para extraer los registros que deseas?

¡Si! Se pone lento cuando son muchos registros. Consultar los datos nuevamente es buena opción.


La franja horaria es GMT +2. Ahora son las 18:01:55.

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