PDA

Ver la Versión Completa : como mejorar este codigo... sumando campos


Goyo
18-05-2007, 21:54:18
buenas tardes amigos foristas....

estoy realizando un sistemita en el que capturo algunas cantidades, y a la vez estas se autosumen (en un campo "TOTAL") cada vez que cambio de Dbedit... aqui esta el codigo para que lo chequen, para mi es demasiado y creo que al compilar mi programa se tarda un poco, tal vez sea por este codigo:


procedure TCardexForm1.DBEdit3Exit(Sender: TObject);
begin
try
// dm.TbEmpleados.Edit;
dm.TbEmpleadosSueldoMensual.AsFloat := dm.TbEmpleados.FieldByName('Sueldo Base').AsFloat + dm.TbEmpleados.FieldByName('Gastos Exentos').AsFloat + dm.TbEmpleados.FieldByName('Prev. Social Mult').AsFloat + dm.TbEmpleados.FieldByName('Quinquenios').AsFloat + dm.TbEmpleados.FieldByName('Serv. Extraordinarios').AsFloat + dm.TbEmpleados.FieldByName('ssvc').AsFloat + dm.TbEmpleados.FieldByName('ayuda de transporte').AsFloat + dm.TbEmpleados.FieldByName('Capac y Desarrollo').AsFloat + dm.TbEmpleados.FieldByName('Compensacionespecial').AsFloat + dm.TbEmpleados.FieldByName('Compensacion').AsFloat + dm.TbEmpleados.FieldByName('Despensa').AsFloat;
Except
end;
end;


no se si exista alguna otra forma de mejorar este codigo, o cambiarlo totalmente, lo que hago es que al introducir una cantidad en un DBEdit (son varios), se vaya autosumando en otro DBEditx (Suma total de los campos), tengo varios DBEdit y en su propiedad DataField (campos de mi tabla de acuerdo al campo a introducir) y en la propiedad DataSource: DM.DsEmpleados "Tbempleados" que es mi tabla de Paradox...
de esta forma si hace lo que quiero de ir autosumando los campos en el Campo: SueldoMensual...

espero me ayuden, de momento mil gracias y un saludo

marcoszorrilla
18-05-2007, 22:36:11
Si el código lo relacionas, no con el DbEdit, sino en el evento OnChange de los campos implicados, te funcionará en cualquier momento y desde cualquier lugar, por ejemplo te dará lo mimso que estas en una pantalla con DbEdits, que en una rejilla pues nada más introducir datos se producirá el cálculo.

Un Saludo.

roman
18-05-2007, 22:41:51
Da la impresión de que estás guardando la suma de ciertos campos en otro campo. Este último campo es lo que se llama un campo calculado, y normalmente no tiene caso guardarlo en la base. Pienso que el rendimiento podría mejorar si renuncias a guardar el dato. Siempre puedes usar un LookupField para mostrar el resultado.

// Saludos

fjcg02
19-05-2007, 00:07:18
Prueba como dice marcoszorrilla en el evento onchange, y utiliza los valores campo.Oldvalue y campo.value, es decir, el valor antes de cambiar y el nuevo valor.

Es decir, presentas el total en un campo, y cada vez que cambias un dbedit, le restas el valor del campo que cambias y le sumas el nuevo valor

procedure TCardexForm1.DBEdit3OnChanget(Sender: TObject);
begin
try
dm.TbEmpleadosSueldoMensual.AsFloat :=dm.TbEmpleadosSueldoMensual.AsFloat
-(Sender as TDBEdit).Field.OldValue
+(Sender as TDBEdit).Field.Value
Except
end;
end;
Asocias la misma funcion a todos los DBEdits, y a correr.


Suerte y saludos