Ole db para VFP

Estamado compañero:
Quisiera pedirle el favor para que me ayude con un inconveniente que tengo con una aplicación Cliente servido
Es un sistema de información que tiene una tabla de + - 3 millones de registro y tiende a crecer mensualmente en unos 100 mil; de esta realizo un selección que es superdemorada (lo hago con execute). Bueno pero este no el problema que me atañe, el inconveniente es que tengo que actualizizar ciertos campos de esta tabla, y aquí es donde comienza el Karma: si lo hago por vista se demora + - 1 minuto por registro (esto es inaudito), lo es intentando hacer por ADO Sigue demorado.
Si existe otra forma de mucho más eficiente las actualizaciones le quedo agradecido; a continuación envío código.
***--------------------------------------------------------------------
** Proceso para actualizar cierto datos de una tabla de 3'000.00
** registro, desde VFP con una B.D. MYSQL
***--------------------------------------------------------------------
Private PoConexion, PoComando, PcConexion
PoConexion=NEWOBJECT('adodb.connection')
*Cadena de conexión
PcConexion= "Provider = MySqlProv.2.5;Data Source = acueducto ; Integrated Security = ' ' ; Password = 123456 ; User ID = siscol ; Location = localhost ; Extended Properties = ' '"
* Abrimos la conexión (En este caso nos validamos en una base de datos de MYSQL mediante el driver OLEDB de MYSQL)
WAIT WINDOW 'Estableciendo conexión ....' NOWAIT
PoConexion.OPEN(PcConexion)
** Hasta qui el Proces es muy rapido
***--------------------------------------------------------------------
WAIT CLEAR
* Instanciamos un objeto Comando
PoComando=newobject('adodb.command')
** Si es un ragno de cuadrantes
If This.Parent.OgtCuadr.value = 1
LnCua1 = This.Parent.TxtCua1.value
LnCua2 = This.Parent.TxtCua2.value
LcFiltro = "Per_cua Between " + Alltrim(Str(LnCua1)) +" And " + Alltrim(Str(LnCua2)) + ")"
Else
LcFiltro = "Per_cua in (" + Lnpre_via + ")"
Endif
* Cadena SQL
lcComando="Select * from acpredec Where Pre_cont = '" + Gcpre_cont +"' AND PRE_OTRAB = '" + Gcpre_otrab +"' AND PRO_COD = '" + CTacproc.Pro_cod +"' And " + LcFiltro
* Establecemos la conexión activa que utilizará el objeto comando
PoComando.ActiveConnection=PoConexion
* Establecemos el comando SQL que se va a ejecutar
PoComando.CommandText=lcComando
* Obtenemos un objeto RecordSet desde el servidor
** ACTUALIZANDO AL SERVIDOR
Local LoCursor
LoCursor=PoComando.Execute
*----------------------------------------------------------------
*** Hasta qui el tiempo de respuesta es bueno
Lcfind = Alltrim(Cacpredco.pre_cta)
Lcfind = "Pre_cta = '" + Lcfind + "'"
Lbgrabar = .F.
Wait windows 'Actualizando datos en el servidor' nowait
LoCursor.movefirst && Go top
LoCursor.Find(Lcfind)
IF ! LoCursor.Eof && Registro Encontrado
LoCursor.Fields("dep_ruta").value = Cacpredco.pre_rut
LoCursor.Fields("pre_fac").value = Cacpredco.pre_fac
LoCursor.Fields("per_cod").value = Cacpredco.per_cod
LoCursor.Fields("end_conse").value = LcnroForm
LoCursor.Fields("dep_fecim").value = Ldatime
LoCursor.Update
Endif
***--------------------------------------------------------------------
** Realizando la actualización de C/campo se demora +- 5 segundos,
** O sea la actualización de c/ registro es +- de ½ minuto (mucho tiempo).
** No se si estoy cometiendo algún error, o si existe otra forma de realizar
** actualizaciones que sea mucho más rápida, les quedo altamente agradecido.
**--------------------------------------------------------------------
mail: [email protected]

1 Respuesta

Respuesta
Te aconsejaría que uses una pequeña base de novedades a actualizar y por algún proceso pases esas novedades a la base de datos central en algún momento que no sea critico y ademas en modo local del servidor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas