FoxPro/Visual FoxPro - Mejorar el tiempo de respuesta

   
Vista:

Mejorar el tiempo de respuesta

Publicado por daju (18 intervenciones) el 18/09/2009 16:09:03
SAludos amigos del foro, el caso es el siguiente, tengo un sistema de stock con una base de datos en postgrest hasta ahi todo bien, el tema es que cuando quierover la lista de los progductos que son 6000 articulos me demora un poquito digamos 4 segundos, y despues mediante un text box filtra con el interactive change del text box hasta mostrar el resultad, pero ahi es 4 seg por pulsasion osea demora, el codigo es este

STORE SQLCONNECT('DatosSiv','postgres','SivDatos1982') TO coneccion

IF coneccion <= 0
=MESSAGEBOX("Error de conexion, verifique el servidor de datos",16,"Siv - Error de Conexion")
ELSE
x=SQLEXEC(coneccion,'select * from stkpdt','bdpdt')

=SQLDISCONNECT(coneccion)

SELECT bdpdt

SELECT bdpdt.pdtid,;
bdpdt.pdtdesc,;
bdpdt.pdtstk,;
bdpdt.pdtcost,;
bdpdt.pdtvmen,;
bdpdt.pdtvmay,;
bdpdt.pdtstktmp,;
bdpdt.pdtdep0,;
bdpdt.pdtdep1,;
bdpdt.pdtdep2,;
bdpdt.pdtgrp,;
bdpdt.pdtsgrp,;
bdpdt.pdtsgrpa,;
bdpdt.pdtsgrpb,;
bdpdt.pdtmk,;
bdpdt.pdtprov,;
bdpdt.pdtljt,;
bdpdt.pdtljtval,;
bdpdt.pdtljtcant,;
bdpdt.pdtmin,;
bdpdt.pdtmax,;
bdpdt.pdtlja,;
bdpdt.pdtdisc,;
bdpdt.pdtumed,;
bdpdt.pdtcat,;
bdpdt.pdtweb;
FROM bdpdt;
ORDER BY bdpdt.pdtdesc INTO CURSOR resultado

thisform.gridpdt.RecordSource= "resultado"
thisform.gridpdt.SetAll("DynamicforeColor","IIF(pdtdisc='Activo',RGB(0,128,0),IIF(pdtmin > pdtstk, RGB(255,0,0),RGB(0,0,255)))", "Column") && Alterna registros blancos y verdes.
ENDIF

por favor digame si esta bien o como puedo hacelerar la consulta, si lo cargo una ves y despues me remito al cursor estaria mal porque cuando se vende no actualizaria dicha consulta, asique descargo esa posibilidad. desde ya gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mejorar el tiempo de respuesta

Publicado por enrique (1041 intervenciones) el 18/09/2009 20:53:27
yo traería solamente la lista para que me elija el producto y luego una vez seleccionado el producto el resto de los datos para ese producto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar el tiempo de respuesta

Publicado por jose canilo (688 intervenciones) el 18/09/2009 21:10:06
lo primero es k conecta la base de datos cada vez k haces una busqueda y eso te hace el proceso lento.

yo lo hago al inicio del programa y luego solo hago referencia a la coneccion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar el tiempo de respuesta

Publicado por DAJU (18 intervenciones) el 18/09/2009 21:26:15
como es eso de hacer referencia ala conexion
me podrias explicar un poquito mas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar el tiempo de respuesta

Publicado por jose camilo (688 intervenciones) el 21/09/2009 14:40:46
Cstr = "DBQ=tu directorio\tu base datos.MDB;";
+ "DefaultDir=&tu directorio;";
+ "Driver={Driver do Microsoft Access (*.mdb)};" ;
+ "Uid=admin;";
+ "Pwd=tuclave;"

Ncstr= SQLSTRINGCONNECT(cstr)
If Ncstr <= 0
MessageBox('Error al Conectar a la Base de Datos ',16,'JJ-System')
Return
EndIf

Ahora bien en todo el sistema solo hago referencia a Ncstr el cual tiene por decirlo asi la linea de comunicacion entre mi sistema y la base de datos.

ejemplo
If sqlExec(Ncstr,"Select * from tutabla where blablablabla","cursortemporal") <=0
error de coneccion
Endif

despues de esto trabajo con el cursor temporal.

esto me ahorra conecciones innecesarias a la base de datos y uso innecesario de la memoria.

otra cosa es k VFP me permite una cantidad limitada de conecciones si sobrepaso el uso me da un mensaje de error y tengo k salir del sistema y volver a entrar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar el tiempo de respuesta

Publicado por devilsito (311 intervenciones) el 19/09/2009 23:09:23
Todas las respuestas dadas por lo colegas estan correctas, pero ademas de implementarlas podiras guardar el codigo de llamada a la base de datos en un procedimiento almacenado, y por otra parte, en la tabla que estas haciendo la consulta, deberias poner la fecha de la transaccion con un campo datetime, y por consiguiente, llamarias a las transacciones del dia y tal vez de la ultima hora y no toda la tabla de datos completa.
El procedimiento almacenado evita el trafico por la red y solo viaja el resultado, ya que el codigo que genera la busqueda esta del lado del servidor y no del cliente. De hecho el PRG se loja en la base de datos.
Saludos

DEVILSITO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar el tiempo de respuesta

Publicado por daju_k (18 intervenciones) el 22/09/2009 13:05:45
Muchas gracias por las respuestas estoy aplicando lo que ustedes me aconsejan y mejoro, no del todo pero mejoro, ahora me interesa eso de los procedimientos almacenados como hago eso en postgrest?. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar