El sistema corre en 3 pc y lo que hace es administrar los siniestros de un estudio de abogados, al principio mientras la base era mas chiva funcionaba bien, el modulo donde tengo problemas (tiempo de carga) es el del listado de todos los informes, alrededor de 9500, mediante un combobox puedo seleccionar una de las compañías o todos y en otro el estado (pendientes/cerrados/anulados/todos)
El problema del tiempo de carga lo tengo solamente cuando consulto "todas las compañías y todos los estados" o "todas las compañías y los informes cerrados"
las tablas son:
Informes
id_inf,id_com,id_ges,id_emp,tip_inf,nsi_inf,nsm_in f,ase_inf,vic_inf,reg_inf,zon_inf,obs_inf,tip_acc, est_acc,ob_inf,rec_inf,vto_inf,ent_inf,est_inf,fac _inf
gestionadores
id_ges,id_com,ape_ges,nom_ges,adi_ges,est_ges
companias
id_com,nom_com,dir_com,loc_com,cuit
empleados
id_emp,ape_emp,nom_emp,dni_emp,dir_emp,loc_emp,tel _emp,cel_emp,mai_emp,reg_emp,zon_emp,ing_emp,egr_e mp,est_emp
accidentes
tip_acc,tipo
estados
est_acc,estado
La consulta de que me genera problemas la realizo de la siguientes manera (en estos no utilizo los combos ya que ambos son "todos" ) y la muestro en un lisview
Código:
ssql = "SELECT id_inf,vto_inf,rec_inf,ase_inf,tip_inf,nsi_inf,nsm_inf, vic_inf,reg_inf,zon_inf,obs_inf,ent_inf,ob_inf,est_inf,nom_com,ape_ges,nom_ges,ape_emp,nom_emp ,tipo,estado,informes.id_emp " _ & "FROM informes,gestionadores,companias,empleados,accidentes,estados " _ & "WHERE informes.id_com=companias.id_com AND informes.id_ges=gestionadores.id_ges AND gestionadores.id_com=informes.id_com AND informes.tip_acc=accidentes.tip_acc AND informes.est_acc=estados.est_acc AND informes.id_emp=empleados.id_emp ORDER BY est_inf desc, vto_inf desc"
Código:
Estuve tratando de hacer las consultas mas reducidas (consultando menos campos) pero sigue tardando mucho.If Not (RsEmpleados.BOF And RsEmpleados.EOF) Then While Not RsEmpleados.EOF Set ObjItem = LV.ListItems.Add(, , RsEmpleados!id_inf) If RsEmpleados!vto_inf = #1/1/1900# Then ObjItem.SubItems(1) = "Sin Datos" Else ObjItem.SubItems(1) = RsEmpleados!vto_inf End If ObjItem.SubItems(2) = RsEmpleados!nom_com If RsEmpleados!rec_inf = #1/1/1900# Then ObjItem.SubItems(3) = "Sin Datos" Else ObjItem.SubItems(3) = RsEmpleados!rec_inf End If ObjItem.SubItems(4) = RsEmpleados!ase_inf If RsEmpleados!tip_inf = "S" Then ObjItem.SubItems(5) = "Simple" ObjItem.SubItems(6) = RsEmpleados!nsi_inf Else ObjItem.SubItems(5) = "Multiple" ObjItem.SubItems(6) = RsEmpleados!nsi_inf & " / " & RsEmpleados!nsm_inf End If ObjItem.SubItems(7) = RsEmpleados!vic_inf ObjItem.SubItems(8) = RsEmpleados!reg_inf ObjItem.SubItems(9) = RsEmpleados!zon_inf ObjItem.SubItems(10) = RsEmpleados!ape_ges & ", " & RsEmpleados!nom_ges If RsEmpleados!ape_emp = "" Then ObjItem.SubItems(11) = "Sin Datos" Else ObjItem.SubItems(11) = RsEmpleados!ape_emp & ", " & RsEmpleados!nom_emp End If ObjItem.SubItems(12) = RsEmpleados!obs_inf If RsEmpleados!ent_inf = #1/1/1900# Then ObjItem.SubItems(13) = "Sin Datos" Else ObjItem.SubItems(13) = RsEmpleados!ent_inf End If ObjItem.SubItems(14) = RsEmpleados!tipo ObjItem.SubItems(15) = RsEmpleados!estado ObjItem.SubItems(16) = RsEmpleados!ob_inf If RsEmpleados!est_inf = "C" Then ObjItem.SubItems(17) = "Cerrado" TotInf = TotInf + 1 ElseIf RsEmpleados!est_inf = "A" Then ObjItem.SubItems(17) = "Anulado" TotAnu = TotAnu + 1 Else ObjItem.SubItems(17) = "Pendiente" TotInf = TotInf + 1 End If RsEmpleados.MoveNext Wend End If
Ahora se me ocurrió paginar el listview o utilizar un recordset desconectado.
Me podrán orientar y recomendar lo mejor.
Gracias.