FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Calcular Campo calculado solo una vez
¿Cómo hacer para que el evento OncalclFields de un dataset sólo se dispare 1 vez, por ejemplo cuando abro el dataset, que se ejecute para cada uno de los artículos del dataset y ya nunca más se dispare?
Por ejemplo: Si estoy tratando de mostrar un grid con un balance en el que el campo "saldo" lo calculo como el saldo de la ficha anterior + debe - haber, y el primero lo calculo a partir de un saldo inicial: saldoinicial= 2 fecha debe haber saldo 01/01/01 10 7 5 ( 2+10-7) 02/01/01 20 0 25 (5+20-0) 03/01/01 30 5 50 (25+30-5) ..... |
#2
|
|||
|
|||
Campos Calculados
Que tal Amigo...
Ya comprendo tu problema. Pues mira, si tienes una bd con los campos (Fecha, debe, haber) y un campo calculado que es Saldo. Si coincido con lo anterior, lo más seguro es que cada vez que se activa el OnCalcFields te hace un descuento adicional que no es el objetivo. TE RECOMIENDO LO SIGUIENTES, pues a mi en la mayoría de los casos lo aplico. Será crear un ciclo de tal manera que todos los campos sean locales (no calculados). y a la hora de involucrar el valor inicial (saldo inicial digitarlo en el primer registro. Ejemplo: Procedure Calculos; var NuevoSaldo:integer begin Tabla1.First // Ubicar la tabla en el primer registro. NuevoSaldo:=tabla1Saldo.AsInteger; Tabla1.Next; // para cambiar al siguiente registro While not Tabla1.EOF do /// Mientras no sea fin de archivo en la tabla hacer begin tabla1Saldo.asInteger:=NuevoSaldo+tabla1debe.Asinteger-tabla1haber NuevoSaldo:=NuevoSaldo+tabla1debe.Asinteger-tabla1haber Tabla1.next; end; end; //////////// Ubicar "calculos" en el evento OncalcFields o en otro momento, por ejemplo un botón Calcular, etc. Espero que no te parezca muy complicado y te pueda servir. Así tengo funcionando varios programas con calculos similares, incluso fechas y utilizando Sql. Saludos |
#3
|
||||
|
||||
Hola a todos!
Me parece una buena opción la que menciona Diego, de hecho yo también lo he resuelto con algo similar. Por otra parte, sólo para responder la pregunta original: Cita:
Cuando la propriedad AutoCalcFields tiene el valor False en evento OnCalcFields se dispara sólo en estos casos:
Si pones la propiedad AutoCalcFields en False puedes reducir la frecuencia con la que se llama el evento, sin embargo no puedes evitar que se ejecute al menos en los tres casos que mencioné anteriormente. Un saludo y seguimos en contacto. |
#4
|
|||
|
|||
Gracias
Hola Diego,
Gracias por tu atención, pero el problema es que estoy trabajando con tablas muy grandes, y el tiempo de respuesta del sistema debe de ser muy pequeño por lo que estoy tratando de optimizar este cálculo. Yo analizaba esa variante del campo calculado porque me di cuenta que estos funcionan MUCHO más rápido que los campos normales si tengo que moverme a lo largo de toda la tabla calculando y actualizando el saldo para cada registro de la tabla. Yo comencé por es variante, pero es incluso mucho más lenta que si lleno el campo ejecutando una consulta SQL determinada. Gracias de todos modos por tu respuesta, Saludos, Félix Cita:
|
|
|
|