Imprimir página | Cerrar ventana

Cuadro combinado filtra con lentitud

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84940
Fecha de impresión: 19/Abril/2024 a las 22:28


Tema: Cuadro combinado filtra con lentitud
Publicado por: jorros
Asunto: Cuadro combinado filtra con lentitud
Fecha de publicación: 10/Enero/2020 a las 14:33

Tengo una tabla, TbHisCabFac,  con la cabecera de facturas y otra tabla TbHisLinFac con las líneas de factura. Desde un formulario veo las facturas emitidas, en origen de registro tengo:

SELECT TbHisCabFac.HisCabEmpCod, TbHisCabFac.HisCabFecFac, TbHisCabFac.HisCabNumFac, TbHisCabFac.HisCabNumFacPro, TbHisCabFac.HisCabTip, Round((DSum("[TotalImp]","ConTotalLineasFacturasFinal_FacFin","[HisLinFacNum]='" & [HisCabNumFac] & "'")-[HisCabIrpf]),2) AS TotFac, TbHisCabFac.HisCabCodCli, TbHisCabFac.HisCabMaeRazSoc, TbHisCabFac.HisCabFecRec, TbHisCabFac.HisCabGes, TbHisCabFac.HisCabSit, TbHisCabFac.HisCabObs, [HisCabEmpiva]/100 AS Iva, [HisCabMaeDes]/100 AS Des, TbHisCabFac.HisCabObra

FROM TbHisCabFac

WHERE (((TbHisCabFac.HisCabObra)=[Formularios]![FrmConFacturas]![ObraNombre])) OR ((([Formularios]![FrmConFacturas]![ObraNombre]) Is Null));

Hasta aquí todo funciona perfecto, cuando abre el formulario muestra los registros con el importe de la factura, que obtengo con un Dsum.

He añadido un cuadro combinado en la cabecera del formulario, con origen de fila SELECT TbHisCabFac.HisCabMaeRazSoc FROM TbHisCabFac;

Que va filtrando el formulario por el nombre del cliente, según se va escribiendo.

Funciona todo correctamente cuando se lanza la aplicación desde el servidor, pero cuando se lanza en los clientes, y se escribe en ese cuadro combinado cada letra demora el resultado en dos segundos, lo que hace muy difícil el utilizarlo. Sé que es un problema de red, pero no puedo optimizar la red más de lo que está.

Mi pregunta es si ¿existe alguna manera de hacer esto mismo de otra forma más rápida, que no "ejecute (Dsum) tantas consultas"?.

Tengo un formulario similar en la tabla vencimientos, que ya tiene los importes, no necesita ningún Dsum y no existen retrasos al usar el cuadro combinado.

 

Gracias anticipadas.




Respuestas:
Publicado por: raipon
Fecha de publicación: 10/Enero/2020 a las 17:47
Hola, parece que sospechas que el cuello de botella és el campo con DSum. Puedes moverlo de la consulta a la propiedad ControlSource de un control del formulario. De esta forma sufrirás una cierta latencia en ver TotFac, pero el resto de datos no se verán penalizados.

Si por algún motivo esto no fuera posible, al abrir el formulario puedes consolidar TotFac en una tabla temporal y modificas el orígen del registro del formulario para que utilice la tabla temporal, en vez de sumar cada vez las lineas de factura.

Saludos.


-------------
Ramon desde Terrassa.

http://www.sqlraipon.blogspot.com/" rel="nofollow - Mi blog


Publicado por: jorros
Fecha de publicación: 10/Enero/2020 a las 20:27
Gracias Raipon, voy a probar con la tabla temporal

Después te cuento.


Publicado por: jorros
Fecha de publicación: 11/Enero/2020 a las 19:51
Con la tabla temporal se soluciona.   GRACIAS

Se puede cerrar el hilo

Un saludo



Imprimir página | Cerrar ventana