Access se hace lento cuanto se van agregando Registros.

Les escribo porque estoy trabajando en una tabla de access para calcular unos costos, la cual a medida que hemos ido agregando valores se ha puesto muy lenta, la cuestión es que me acabo de dar cuenta que si elimino todos los registros y solo dejo uno, el calculo se hace mucho más rápido, lo curioso es que en ningún momento necesito que la consulta se ejecute completa, unicamente me interesa con 1 solo record a la vez, me doy cuenta que si ejecuto la consulta teniendo muchos valores pero la ejecuto con un filtro unicamente me muestra ese registro, pero se tarda lo mismo que si muestra todo, creo que de igual manera los calcula todos a la vez, ¿alguna forma de evitar esto?

1 respuesta

Respuesta
2

Carlos: Si pones aquí la SQL de la consulta quizá de una pista para mi o para alguien que pueda responderte.

Lo que no acabo de ver es que si seleccionas un solo Registro, te haga los cálculos sobre todos.

Y como curiosidad ¿De cuántos registros estás hablandoen esa Tabla?. Un saludo >> Jacinto

Muy buenas, pasa con casi todas las consultas mas o menos complejas adjunto una de ejemplo. (la complejudad es que por ejemplo la "qryTotalPriceWithGPS" tiene muchisimos valores de otras consultas.

SELECT DISTINCT tbItemOffer.BId, qryTotalPriceWithGPS.SOId, qryTotalPriceWithGPS.IOId, qryTotalPriceWithGPS.Tag, qryTotalPriceWithGPS.Item, qryTotalPriceWithGPS.Qty, qryTotalPriceWithGPS.TotalwithGPS, Impuesto([TotalwithGPS],[ICA&OC&ISL]) AS TaxesICAOCISL, [TaxesICAOCISL]+[TotalWithGPS] AS TotalPrice, [TotalPrice]/[qryTotalPriceWithGPS]![Qty] AS UnitPrice, qryTotalPriceWithGPS.[ICA&OC&ISL], [TotalPrice]*[tbBase]![ImpuestoIndustriayComercio] AS TotalImpuestoIndustriayComercio, qryTotalPriceWithGPS.TaxUnit, qryTotalPriceWithGPS.ImpuestoSobreLaRenta, qryTotalPriceWithGPS.ProfitEBITDA, qryTotalPriceWithGPS.GPS, qryTotalWereHouse.SumOfCostWH
FROM tbBase INNER JOIN ((qryTotalPriceWithGPS INNER JOIN tbItemOffer ON qryTotalPriceWithGPS.IOId = tbItemOffer.IOId) INNER JOIN qryTotalWereHouse ON tbItemOffer.IOId = qryTotalWereHouse.IOId) ON tbBase.BId = tbItemOffer.BId
ORDER BY qryTotalPriceWithGPS.SOId, qryTotalPriceWithGPS.IOId;

a lo que me refiero es que si abro la consulta con un filtro o la muestro desde un formulario solo me muestra un registro, pero tarda lo mismo que si me muestra todas, en cambio si elimino todos los demas registros si lo hace rapido, por lo que asumo que access primero ejecuta la consulta y despues hace el filtro. 

la idea que se me ocurre es que esa consulta se ejecute unicamente para ciertos registros, no todos, pero no se si es posible. 

Carlos: Por lo que observo la lentitud, pueden provocarla las otras consultas, dentro de ésta, ella misma por el DISTINCT.

No sé en qué medida, puesto que ignoro la estructura de datos que tienes. Yo primero comenzaría por hacer la Consulta, con solo el SELECT y poniendo un WHERE, para asegurar que solo toma 1 Registro (la que tienes según como sea la tabla te los puede tomar todos si son distintos).

Eso debe aligerar bastante. Si no fuera suficiente, otra solución es hacer que las consultas que citas, sean unas tablas temporales, creadas con un recordset lenguaje SQL.

Si quieres subir tu base a cualquier Servidor y facilitar el enlace, puedo mirar cómo hacerlo, pero sin los objetos delante cualquier respuesta que te pueda dar aparte de la orientación anterior, es casi un brindis al sol. Saludos >> Jacinto

¡Gracias! ¡Gracias! ¡Gracias! ¡Gracias! ¡Gracias! ¡Gracias! Ya lo pude solucionar, gracias

Lo que pasaba es que unicamente tenia esa ultima consulta, lo que hice fue aplicarle la condición a todas las consultas detrás de esa. (Y)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas