TQuery

Tengo otra pregunta tengo mi query con tres campos que son calculated y ahí realizo una consulta para traerme cantidades y hago cálculos pero esto cuando lo importo a una tabla me quita mucho tiempo como son como 6480 números de parte me quita como 20 minutos para hacer esta operación quiero hacer una forma de que si los cálculos que hago es cero que elimine ese registro del query para que no se importe y así reduzco mi universo de números porque no tengo forma de hacer en un query la comparación para que no m, e lo traiga el registro porque tengo una tabla donde tengo la información del inventario de cada día y tengo que sacar la variación de dos días y como no puedo realizar en delphi dos querys u otras cosascomo tablas temporales porque estoy utilizando Access como BD no puedo realizar cálculos y necesito disminuir ese tiempo y se me ocurrió que al realizar el query con los campos calculated podía realizar un filtro pero como esos campos no puedo usarlos como filtro no se se puedo conectar el Update y en la parte de borrar poner un código poniendo como condición que si el QueryCampo=0 que lo borre pero esto en que momento se ejecuta.
Por ejemplo
Delete from QComparacion where QQComparacionVQty=0;
Este código seria y no se si al momento de ponerle la cantidad a esecampo en en el evento de calcular se ejecute el delete si tengo algún error me corriges y también si lo puedo utilizar así me borraría muchos registro y me disminuye mi imporatcion del query a una tabla pero no se si esto me aumentaría demasiado tiempo.
Respuesta
1
A ver creo que no hemos comprendido el funcionamiento de UpdateSQL, mira cuando tu usas un TTable a este solo le conectas la tabla y listo, si le das Table1.Delete te borra el registro dondes estas posicionado, si le das Table1.Insert te inserta un nuevo registro para que le captures la informacion y si le das Table1.Post; te graba los datos que insertaste o modificaste, ok... bueno pero internamente lo que hace el TTable es hacer Insert Into, un Update y un delete, si me explico, entonces como el TQuery no tiene esas propiedades automaticamente, entonces estas se las asignas prescisamente en el UpdateSQL, entonces la parte del Modify se ejecuta cuanto tu haces una modificacion al registro y le das Query.Post; el Insert se ejecuta cuando tu Insertas un registro y das Query.Post y el Delete se ejecuta cuando tu le das al Query.Delete; ahora para que estos cambios se vean reflejados inmediatemente en la Base de Datos deberas darle Query1.ApplyUpdate;
El .Post te graba en memoria y el ApplyUpdate hace el commit a tu base de datos, de acuerdo.
Ahora en cuanto a tus cálculos no te entiendo muy bien. Dices que haces cálculos a 6480 registro lo cual pues se te tarda varios minutos, pero también me dices que entre esos registros muchos tienen valor de cero y que no los necesitas, si esto es lo que tratas de decirme, entonces lo importante es que no leas esos registro que te da cero, lo cual lo puedes manipular en SQL es decir en select * from ... en el where dale la condición para que no te de la lista de registros que traigan cero
por ejemplo Where Total >0
Algo así.
Si pero es que tengo una base de datos que contiene la información de cada día de los números de parte y cada numero tiene las cantidades que tuvieron en su inventario de ese día.
Fecha NP Qty
17-02-2005 3300 560
18-02-2005 3300 500
Como este ejemplo y tengo que sacar la variación y el porcentaje de variación pero como no tengo forma de calcular la variación lo tengo que hacer aparte pero necesitan filtrar y con los campos calculated no se puede filtrar y lo que hago es pasarlo a una tabla pero con los campos calculated tarda como 20 minutos y lo que quiero es reducir la cantidad de que si el numero es cero al sacar la varianza que me lo elimine para importar a la tabla menos números o hay una forma directa de sacar la variación en el query.
Ok, entonces vamos un poco más elevados en programación... por antencion no es muy difícil:
Ya tienes tu UpdateSQL conectado a tu query, y en tu query pues tienes tu SQL (select * from ... etc)
Bueno ahora vas a poner otros componentes:
1. TClientDataSet
2. TDataSetProvider
Son dos componentes y la forma de conectarlos es la siguiente
TClientDataSet conectado al TDataSetProvider con la propiedad ProviderName; El TDataSetProvider ira conectado a tu query con la propiedad DataSet y luego tu ya tienes conectado tu Query a tu UpdateSQL.
Bueno ahora olvidate de los campos calculados en el query, ahora estos serán manejados en el ClientDataSet. De la siguiente manera, cuando ya tengas todo conectado ya te olvidaras de todos los componentes hasta de tu query ahora el principal sera TClientDataSet, el cual lo manejaras tal si fuera tu query o un TTable.
Cuando ya tengas todo conectado le das doble click a tu clientDataSet y le darás Agregar todos los campos, los cuales serán los mismos que están en tu query, de acuerdo.
Bien ahora los campos calculado en TClientDataSet se llaman Aggregates, estos campos tienen la ventaja de que los puedes manejar tal y como si fueran campos reales de la base de datos y puedes hacer filtros, búsquedas etc...
Ya cuando lo creas al igual que en el query activas la propiedad AutoCalcFields, en el TClientDataSet la propiedad es AggregatesACtive y la pones true y listo es todo.
Para hacer inserts o deletes solo pones ClientDataSet1. Insert o .Post para grabar e igualmente ApplyUpdates para grabar en la base de datos. Es decir funciona igual que el query puesto que esta conectado al query a través de tu DataSetProvider, y listo ya puedes hacer filtros con tus Aggregates... si algo no entiendes dímelo.
Como puedo finalizar pregunta
Hola Buenos Días
Necesito de tu ayuda lo que pasa que declare en access un campo tipo Date/Time y en su formato le puse hora corta, y en deplhi al momento de insertar ese campo lo realizo con un query y en el parámetro uso la función time() que me da la hora del sistema y lo inserto y todo va bien solo que cuando habro access me pone 12:00:¿00 a.m. así en todos los registros porque? Ya que cuando en delphi corro linea por linea si trae datos cuando lo inserto y no se que puede ser me imagino que el problema esta en access
Necesito de tu prientacion
Muchas Gracias
Supongo que tu quieres que te ponga fecha y hora, ¿correcto?
bueno la funcion time() que estas usando, creo que es el problema, usa la funcion now;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas