Mejorar velccidad de carga del grip en fox 6.0

Buenas tengo el siguiente problema desde hace un tiempo acá se me puso pesada la aplicación al cargar el grip de los diferentes módulos de facturación, caja, inventario, etc, daré por ejemplo el código que tengo al accesar a caja esto en el procedimiento carga que cree y es le siguiente:
select TOP 100 caja.recibo, caja.atencion, caja.fecha_RECIB, caja.montoi, caja.montoe, caja.tipomovi, caja.n_caja ;
     from caja;
     where caja.n_caja = xn_caja;
     order by caja.recibo desc;
     into cursor xlista
select xlista
go top  
thisform.grid1.recordSource = " "
thisform.grid1.RecordSourcetype = 4
thisform.grid1.recordSource = "Select * from xlista into cursor xcaja"
thisform.grid1.refresh   
thisform.command1.setfocus
thisform.refresh
y este el código que coloque en el procedimiento init:
thisform.olecontrol1.Panels.Add(1,,"Usuario: "+NombreUsuario,,)
thisform.olecontrol1.Panels(1).AutoSize = 1  && sbrContents
thisform.olecontrol1.Panels.Add(2,,"Fecha: "+dtoc(date())+" ",,)
thisform.olecontrol1.Panels(2).AutoSize = 2  && sbrContents
Set Exact Off
 Select Grupo_Usuario
 Set Order To Codigo
 Seek ("TMVC")
 Do While substr(Grupo_Usuario.Codigo,1,4) = "TMVC" and !eof()
  If Grupo_Usuario.Grupo = GrupoUsuario
   formulario = "thisform.command"+substr(Grupo_Usuario.Codigo,5,1)+".enabled"
   &formulario = .t.
  EndIf
  if eof()
   exit
  endif
  skip
 EndDo
Set Exact On
thisform.carga
return
Mi pregunta concisa es porque se tarda tanto en cargar y mostrar la información, la dbf que utiliza tiene ya 95841 registros al momento de postear esta pregunta, habrá otra forma de mejorar el tiempo de respuesta de la carga ya que se me hace una cola en la taquilla por lo lento del sistema cada vez que se realiza un recibo de pago y vuelve al formulario para actualizarse.
Este mismo método lo uso en otros módulos como facturación, inventario, etc.
Que idea o solución podrían darme, muy agradecido de antemano saludos.

1 Respuesta

Respuesta
1
Estuve leyendo tu pregunta, no podría darte una respuesta de una pero te diré lo que yo haría:
1. Medir los tiempos, es decir, adicionar al código lo siguiente
WAIT WINDOW "CERO"
select TOP 100 caja.recibo, caja.atencion, caja.fecha_RECIB, caja.montoi, caja.montoe, caja.tipomovi, caja.n_caja ;
     from caja;
     where caja.n_caja = xn_caja;
     order by caja.recibo desc;
     into cursor xlista
WAIT WINDOW "UNO"
select xlista
go top  
thisform.grid1.recordSource = " "
thisform.grid1.RecordSourcetype = 4
thisform.grid1.recordSource = "Select * from xlista into cursor xcaja"
thisform.grid1.refresh   
thisform.command1.setfocus
thisform.refresh
wait window "DOS"
y este el codigo que coloque en el procedimiento init:
WAIT WINDOW "TRES"
thisform.olecontrol1.Panels.Add(1,,"Usuario: "+NombreUsuario,,)
thisform.olecontrol1.Panels(1).AutoSize = 1  && sbrContents
thisform.olecontrol1.Panels.Add(2,,"Fecha: "+dtoc(date())+" ",,)
thisform.olecontrol1.Panels(2).AutoSize = 2  && sbrContents
WAIT WINDOW "CUATRO"
Set Exact Off
 Select Grupo_Usuario
 Set Order To Codigo
 Seek ("TMVC")
 Do While substr(Grupo_Usuario.Codigo,1,4) = "TMVC" and !eof()
  If Grupo_Usuario.Grupo = GrupoUsuario
   formulario = "thisform.command"+substr(Grupo_Usuario.Codigo,5,1)+".enabled"
   &formulario = .t.
  EndIf
  if eof()
   exit
  endif
  skip
 EndDo
Set Exact On
thisform.carga
WAIT WINDOW "CINCO"
Esto sirve solo para que determines en cual de estos grupos de código es que está la demora.
Si la demora es del CERO al UNO analizar si se puede depurar esa tabla "CAJA", si no hacer búsqueda por indices ya que se supone es más rápida, es decir, el SEEK.
La idea es ir analizando donde esta el problema, otra cosa que puedes hacer es eliminar en calidad de prueba registros de la tabla "CAJA" para ver si con pocos registros se agiliza el proceso.
Prueba estas cosas y me dices.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas