Necesito si pueden ayudarme a optimizar una consulta a varias tabla de access
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:
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
Estuve tratando de hacer las consultas mas reducidas (consultando menos campos) pero sigue tardando mucho.
Ahora se me ocurrió paginar el listview o utilizar un recordset desconectado.
Me podrán orientar y recomendar lo mejor.
Gracias.