** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Cuadro combinado filtra con lentitud
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCuadro combinado filtra con lentitud

 Responder Responder
Autor
Mensaje
jorros Ver desplegable
Habitual
Habitual
Avatar

Unido: 20/Octubre/2008
Localización: España
Estado: Sin conexión
Puntos: 110
Enlace directo a este mensaje Tema: Cuadro combinado filtra con lentitud
    Enviado: 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.

Arriba
raipon Ver desplegable
Moderador
Moderador


Unido: 10/Diciembre/2004
Localización: Desconocida
Estado: Sin conexión
Puntos: 4031
Enlace directo a este mensaje Enviado: 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.

Mi blog
Arriba
jorros Ver desplegable
Habitual
Habitual
Avatar

Unido: 20/Octubre/2008
Localización: España
Estado: Sin conexión
Puntos: 110
Enlace directo a este mensaje Enviado: 10/Enero/2020 a las 20:27
Gracias Raipon, voy a probar con la tabla temporal

Después te cuento.
Arriba
jorros Ver desplegable
Habitual
Habitual
Avatar

Unido: 20/Octubre/2008
Localización: España
Estado: Sin conexión
Puntos: 110
Enlace directo a este mensaje Enviado: 11/Enero/2020 a las 19:51
Con la tabla temporal se soluciona.   GRACIAS

Se puede cerrar el hilo

Un saludo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable