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