FoxPress – Noviembre 2005

 

Un termomentro en una conexión a servidor

 

 

             Por  Ros Berguer

 

Un problema común cuando te tienes que traer grandes volumenes de datos de un servidor es que puede pasar un cierto tiempo entre que empiezas la consulta y llegan todos los datos, lo que genera en el usuario la inquietud de que quizás el programa se ha colgado o cosas similares que le llevan a comportamientos histericos como empezar a pulsar todas las teclas o quizás.... llamarte por telefono y decirte que tu programa no funciona.

Esto nos lleva a la necesidad de tener que mostrar una barra de progreso y a trabajar de forma asynchrona.

     Mira este código que es muy sencillo y lo que hace es dividir el problema en dos pasos. Si tienes bien indexada la tabla esto no debería  provocarte un mayor coste de tiempo y a cambio ganas bastante.

 

cConnectString="Driver=SQL Server;Server=Y;Database=Y;UID=usuario;PWD=clave"
hConn=SQLStringConnect(cConnectString)
SQLExec(hConn, "select count(*) AS rcount from tu_gran_archivo","rcuenta")
nTotalRecordsToFetch=rcuenta.rcount
USE
 
lSQLResult=SQLSETPROP(hConn,"Asynchronous",.T.)
llCancel = .F.
lnResult = 0
 
ON ESCAPE llCancel = .T.
DO WHILE (!llCancel AND lnResult = 0)
  lnResult = SQLExec(hConn, "select * from tu_gran_archivo","getrec")
  DOEVENTS
  *- La Barra de Progreso deberás codificarla
  =USED("getrec") AND MuestraProgressBar(CURSORGETPROP("RecordsFetched","getrec"), m.nTotalRecordsToFetch)
ENDDO
 
SQLCancel(hConn)
SQLDisconnect(hConn)

 

 

 

FoxPress – Noviembre de 2005