Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Redondear en un filtro TTable (https://www.clubdelphi.com/foros/showthread.php?t=61945)

pjmedina 27-11-2008 19:34:09

Redondear en un filtro TTable
 
Buenas a todos,

tengo un problema con un filtro. Tengo una tabla (TTable). Esta table tiene la siguiente estructura(codigo integer, nombre varchar(60), saldo NUMERIC(15, 3), resto NUMERIC(15, 3)).
En mi aplicacion hay un momento en el que pongo un filtro a la tabla diciendo que solo muestre los registros cuando saldo<>resto.

La tabla tiene los siguientes valores
CODIGO NOMBRE SALDO RESTO
1 JUAN 13,03 13,03
2 PEPE 40,92 40,92
3 LUIS 119,24 119,24
4 MARIA 200,00 0,00

Tabla.filter:='saldo<>resto'

Cuando le pongo el filtro, en lugar de mostrarme el codigo 4, me muestra los codigos 4, 1,3.
Yo pienso que tiene que ser a causa de redondeos, podría redondear de alguna forma en el filtro.

No puedo cambiar el componente ttable ya que mi aplicacion es bastante vieja y tendria que rehacerla entera.

Muchas gracias por todo.

PD.: utilizo delphi 7 y firebird 1.5

Caral 27-11-2008 19:49:58

Hola
Tal vez asi:
Código Delphi [-]
var 
R: Float;
Begin
 R:= Tabla.Filebyname('resto').Value;
Tabla.filter:='saldo <> '+FloatToStr(R);
Tabla.Filtered := True;
Saludos

pjmedina 28-11-2008 09:11:34

pero así me filtrará dependiendo del registro en el que esté cuando active en filtro. Yo quiero que me filtre dependiendo del valor que tenga cada registro.


Gracias por contestar

Lepe 28-11-2008 16:51:28

Los flotantes tienen más decimales de lo que muestran, así que una condición de des/igualdad entre ellos, raramente se cumple.
Código:


Tabla.filter:='saldo - resto < 0.001'

Me extraña esto en Firebird. ¿qué dialecto usas?
Igual el problema viene por el tabla.filter que solo pueda manejar floats....

Edito: igual tienes que ajustar más esa diferencia y usar 0.003 ó 0.004, porque aunque veas 13.03 puede que el valor real sea 13.028 ó 13.027

Saludos

pjmedina 11-12-2008 12:00:13

Muchas gracias, lo probaré. Utilizo dialecto 1.

La solucion que me he dado es la siguiente, he pasado un script a la tabla:
update nomtabla set campo1=f_roundto(campo1,2),campo2=f_roundto(campo2,2)

de esta forma con el filtro que yo ponia funciona, lo que pasa que me puede volver a pasar.


La franja horaria es GMT +2. Ahora son las 18:24:16.

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