Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   oncalcfield y filter con access (https://www.clubdelphi.com/foros/showthread.php?t=24281)

mangk 14-08-2005 10:08:28

oncalcfield y filter con access
 
Hola, tengo una base de datos Access y necesito calcular unos campos en base a la misma tabla sumando un campo desde el primer registro hasta el actual dependiendo de otros campos, una especie de acumulador.
El tema es que con el evento oncalcfield tarda bastante en actualizar la tabla, he probado de cambiar el cache y otras propiedades de la tabla , y no he conseguido mejora, la tabla tiene apenas 200 registros y la utilizo mediante los componentes ADO de delphi.
El proceso de calculo lo hago recorriendo la tabla desde el principo hasta el registro en el que esta posicionando, usando otro dataset referenciando a la misma tabla.

Por otro lado cuando establezco la condicion de filter de una tabla si pongo expresiones que utilicen el mismo campo 2 veces y/o el operador "or" cuando ejecuto la aplicacion me da un error. (ej : "a=100 or a =200"). A alguien le ha pasado?, Esto me fuerza a utilizar el evento OnFilterRecord y es muchiiiisimo mas lento que el filter que se evalua antes de devolver los registros a Delphi.



Gracias por cualquier consejo o sugerencia.

vtdeleon 14-08-2005 15:41:43

Saludos

Recorrer la tabla es un procedimiento que consume recursos, lo recomendable es utilizar sentencias SQL para obtener sumatorias de un campo o contar la cantidad de registros y el resultado de esto desplagado en algun edit:)
Utiliza AdoQuery o AdoDataset, personalmente creo que es mejor

MasterXP 15-08-2005 00:22:58

Yo pienso lo mismo que el compañero vtdeleon.
si fuera tu hiciera lo siguiente:

Pusiera un ADOQuery, le modificas la propiedad conection (en modo Design).
ya en Runtime, haces lo siguiente:
Código Delphi [-]
 
//Hacer la consulta
With Adoquery1 DO
Begin
Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add('Select Sum(Campo_a_Sumar) Where A=100 or A=200');
Open;
end;
 
//Aginar el resultado de la consulta a un Edit
Edit1.text:=Adoquery1.field.Field[0].asString;


salu2.

mangk 17-08-2005 05:37:41

Gracias, usando ADOQuery mejoro bastante los tiempos, no es una maravilla pero esta mucho mejor.


La franja horaria es GMT +2. Ahora son las 04:17:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi