Ver Mensaje Individual
  #2  
Antiguo 03-06-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Reputación: 19
kuan-yiu Va camino a la fama
Varias cosas.
Los datos tipo float se almacenan internamente de forma muy diferente a como los ves por pantalla por lo que pretender encontrar "algo como 31." no es posible porque "31." no es un decimal válido, como mucho entenderá que "31", "31." y "31.0" son lo mismo.
Las fechas internamente se almacenan como un float, así que más de lo mismo.
Si ya tienes todos los datos cargados y en el grid lanzar la consulta cada vez que filtra no me parece lo más cómodo, para eso sería mejor que usases componentes tipo DataSet, ClientDataSet, DataSetProvider... según la estructura que más se adecue y filtres en el componente, o sea solo muestres lo que te interesa. De ese modo puedes tener una versión de esas columnas en formato string y buscar en ellas siguiedo la lógica que estás indicando.

Si de todos modos quieres hacerlo a través de una consulta tendrás que construirla de forma diferente.
Si por ejemplo se intruduce la fecha: "01/01" Supondrías que es el uno de enero de cualquier año y deberías construir la consulta así:
Código Delphi [-]
   miSql.close;
   with miSql.SQL do
   begin
      Clear;
      Text := 'SELECT * FROM HISTORICO WHERE';
      Add('month(FECHAEMISION)=:mes and day(FECHAEMISION)=:dia');
      //Todas las otras condiciones que necesites
      Add('ORDER BY FechaEmision');
   end;
   miSql.ParamByName('mes').AsInteger:= miMes;
   miSql.ParamByName('dia').AsInteger:= miDia;
Pero esto aporta una serie de problemas a la hora de construir la consulta que yo personalmente evitaría.

Última edición por kuan-yiu fecha: 03-06-2020 a las 12:06:55.
Responder Con Cita