Uso de FLUSH

814 views
Skip to first unread message

Mario Escudero

unread,
Jan 2, 2014, 7:31:36 AM1/2/14
to publice...@googlegroups.com
Buenos dias con todos:
Tengo una rutina para grabar varias tablas (metodo "grabar")
La actualizacion la hago con Tableupdate
Me han aconsejado usar FLUSH lo cual me parece una excelente idea.
Mi consulta es:
El comando FLUSH lo pongo despues de cada Tableupdate (CASO1) o despues de mi rutina para grabar (CASO 2) o  ?
Hay alguna diferencia?
Mil gracias de antemano

CASO 1:

*********************
Metodo "grabar"
*********************
sele tabla_1
tableupdate....
FLUSH
sele tabla_2
tableupdate....
FLUSH
sele tabla_n
tableupdate....
FLUSH


CASO 2:

thisform.grabar
FLUSH




Fernando D. Bozzo

unread,
Jan 2, 2014, 7:59:47 AM1/2/14
to publice...@googlegroups.com
Hola Mario:

Para encapsular debería ir dentro de tu método Grabar, el final de todo y no por cada tabla.
Aunque si luego de grabar cerrás las tablas, el Flush no es necesario.


Saludos.-

Mario Escudero

unread,
Jan 2, 2014, 8:22:11 AM1/2/14
to publice...@googlegroups.com
Muchas gracias Fernando
Asi lo hare !!!

Mario Escudero

unread,
Jan 2, 2014, 8:29:30 PM1/2/14
to publice...@googlegroups.com
Como hago para que le Post aparezca como "Finalizado"?
Gracias

Fernando D. Bozzo

unread,
Jan 2, 2014, 8:42:33 PM1/2/14
to publice...@googlegroups.com
Entrando por la web, aquí:

http://groups.google.com/group/publicesvfoxpro/topics

Luego entrás al post que te parece la respuesta, y en la esquina inferior izquierda está el indicador de finalizado.

Mario Escudero

unread,
Jan 2, 2014, 8:48:14 PM1/2/14
to publice...@googlegroups.com
Donde dice "Marcar como completo"'

Fernando D. Bozzo

unread,
Jan 2, 2014, 8:50:20 PM1/2/14
to publice...@googlegroups.com
Sí, aunque a mí me muestra "Marcar como finalizado"

Mario Escudero

unread,
Jan 2, 2014, 8:57:13 PM1/2/14
to publice...@googlegroups.com
Gracias Fernando !!!!

Fernando D. Bozzo

unread,
Jan 2, 2014, 9:03:12 PM1/2/14
to publice...@googlegroups.com
Hola Mario:

De marcar mi respuesta, debería ser donde te puse la solución y no la última respuetsa que te dí, ya que si alguien busca la solución al problema que planteaste, se va a encontrar que la solución dice:


>    Sí, aunque a mí me muestra "Marcar como finalizado"

Y se va a quedar atónito preguntándose cómo eso puede ser la respuesta que soluciona lo del Flush.
La respuesta, en todo caso, sería la primera.


Saludos.-



El viernes, 3 de enero de 2014 02:48:14 UTC+1, Mario Escudero escribió:

Mario Escudero

unread,
Jan 2, 2014, 9:06:21 PM1/2/14
to publice...@googlegroups.com
ok, voy a marcar la primera respuesta como Finalizado
Espero que esta vez lo haga bien...jeje
Gracias nuevamente

Fernando D. Bozzo

unread,
Jan 2, 2014, 9:10:52 PM1/2/14
to publice...@googlegroups.com
Perfecto Mario, así le sirve a otros.

Saludos!

HernanCano

unread,
Jan 2, 2014, 9:36:45 PM1/2/14
to publice...@googlegroups.com
De la ayuda de FLUSH se concluye que:

1. Utilizar el comando como su única palabra ("FLUSH") manda al disco lo pendiente de grabar de todas las tablas que lo requieran.

2. Utilizar el comando como su única palabra ("FLUSH")
Para mandar al disco lo pendiente de grabar de una sola tabla, utilizas la cláusula IN, más o menos así:

FLUSH IN TABLA_1
FLUSH IN TABLA_2
FLUSH IN TABLA_N

después de tus TABLEUPDATE, claro está.

Mario Escudero

unread,
Jan 2, 2014, 9:40:08 PM1/2/14
to publice...@googlegroups.com

Pero poner FLUSH a secas despues de varios Tableupdate no baja lo de todas las tablas?
Gracias

----
Mario Escudero
Mov 995-817087 Rpm *854388
www.cheff2000.com

Enviado desde mi móvil

Fernando D. Bozzo

unread,
Jan 2, 2014, 9:50:16 PM1/2/14
to publice...@googlegroups.com
Mario deduzco que no te llevás bien con el inglés de la ayuda, que dice esto:

> If you do not specify nWorkArea, cTableAlias, or cFileSpec, FLUSH applies to all open tables and indexes in the current data session.


En otras palabras:
"Si usted no especifica nWorkArea, cTableAlias, o cFileSpec, FLUSH aplica a todas las tablas abiertas e índices en la sesión de datos actual"


Saludos.-

HernanCano

unread,
Jan 2, 2014, 11:51:12 PM1/2/14
to publice...@googlegroups.com
¿De dónde sacas éso?

Fidel Charny

unread,
Jan 3, 2014, 7:49:02 AM1/3/14
to publice...@googlegroups.com
De la ayuda de VFP 9,  sección Note, in fine, justo antes de FORCE.

Mario Escudero

unread,
Jan 3, 2014, 8:58:13 AM1/3/14
to publice...@googlegroups.com
Hola Hernan:
Tendria algun sentido utilizar el caso 2 (tabla por tabla)?
Gracias

HernanCano

unread,
Jan 3, 2014, 11:44:07 AM1/3/14
to publice...@googlegroups.com
Sólo lo menciono por que en la ayuda está: la sintaxis lo permite.

Si observas el preguntante Mario Escudero, está utilizando FLUSH supuestamente para cada uno sin el IN. Estonces le indico que la sintaxis correcta para "cada uno" es con el IN por que la sistaxis lo permite.

Seguro que no tiene sentido, pero la cosa es que es peor hacerlo como lo indica el preguntante, mínimo por que no fue a la ayuda para conocer la sintaxis correcta.

GeoSys Diseño de Software

unread,
Jan 4, 2014, 12:29:27 PM1/4/14
to Comunidad de Visual Foxpro en Español
El FLUSH se pone al final de todas las transacciones, no tiene sentido ir guardando tabla por tabla en el mismo código.

En el código se hacen todas la modificaciones a las tablas y de último se asigna FLUSH.

El comando FLUSH vuelca la memoria al disco rígido y actúa sobre todas la tablas abiertas actualmente.

Al final del trozo de código que modifica las tablas FLUSH, esto lo he utilizado por años con DBF´s con grandes resultados y casi nunca hay rompimiento de tablas o índices.

Saludos
Anthony Contreras Peralta
Costa Rica.


Mario Escudero

unread,
Jan 4, 2014, 2:37:36 PM1/4/14
to publice...@googlegroups.com
Gracias Anthony, asi lo estoy haciendo.
Relacionado a eso, Fernanado me recomendo el comando  SYS(1104)
En que parte iria? Despues del FLUSH?
Gracias

GeoSys Diseño de Software

unread,
Jan 4, 2014, 3:09:20 PM1/4/14
to Comunidad de Visual Foxpro en Español
Es correcta la recomendación de Fernando, Mario Escudero, SYS(1104) es buena para purgar la memoria caché, como anécdota en un Súper Mercado con un sistema de punto de ventas, pasaba en horas de la tarde que en una de las cajas (terminal) se presentaba el error C000005, descubrimos que el error se debía a que una barra de memoria se recalentaba y la compu quedaba con la mitad de memoria RAM, por lo tanto en horas de la tarde daba ese problema, se reiniciaba y se resolvía el problema, al día siguiente la misma cosa.

Pero cuando no sabía que era lo que estaba pasando con SYS(1104) ese problema se resolvió, lógico, que cuando nos dimos cuenta que era lo que presentaba el problema entonces cambiamos memoria.

Es por eso que Fernando por su experiencia te lo recomienda, SYS(1104) no es recomendable abusar de él, si no en algunas partes de código purgas la memoria caché. Aunque hoy en día la memoria caché en las pc´s está bastante desahogada, no es como antes que se carecía de memoria RAM.


Mario Escudero

unread,
Jan 4, 2014, 4:15:51 PM1/4/14
to publice...@googlegroups.com
Gracias Geo por la valiosa informacion.
Justamente mis problemas se presentan tambien en le punto de venta de mis sistema de restaurantes.
Aun no tengo claro en qué parte del código pongo el SYS(1104) o, en todo lo caso, cuál/cómo es la mejor forma de usarlo.
Mil gracias nuevamente


----
Mario Escudero
Mov 995-817087  Rpm *854388

Fernando D. Bozzo

unread,
Jan 4, 2014, 4:49:43 PM1/4/14
to publice...@googlegroups.com
Hola Mario:

El sitio para usarlo sería luego de haber realizado todas las actualizaciones, al final de todo.

Saludos.-

Mario Escudero

unread,
Jan 4, 2014, 7:12:49 PM1/4/14
to publice...@googlegroups.com

Podria ser en el Destroy de cada Form o quizas al Salir de Sistema?
El comando sería:  =sys(1104)
Es correcto?
Gracias

----
Mario Escudero
Mov 995-817087 Rpm *854388
www.cheff2000.com

Enviado desde mi móvil

Fernando D. Bozzo

unread,
Jan 4, 2014, 7:21:06 PM1/4/14
to publice...@googlegroups.com
Mario, hay que aplicar un poco de sentido común:

- En el destroy de cada form: Eso depende de cuánto tiempo uses el form. Si lo usan todo el día sin salir de él, entonces no serviría de nada
- Al salir del Sistema: En este punto... es que ya no tiene ningún sentido. Si la idea es "limpiar" la caché de buffers que de a poco enlentecen la aplicación, hacerlo cuando el usuario sale de la aplicación es como querer apagar el televisor con el control remoto después de haberlo desenchufado...

Además esto ya te lo había respondido antes:

> El sitio para usarlo sería luego de haber realizado todas las actualizaciones, al final de todo

"Después de haber realizado todas las actualizaciones" significa eso, después de haber guardado los datos modificados de las tablas, no al cerrar el sistema.


Saludos.-

Mario Escudero

unread,
Jan 4, 2014, 7:23:21 PM1/4/14
to publice...@googlegroups.com

Muchas gracias Fernando
Un abrazo

----
Mario Escudero
Mov 995-817087 Rpm *854388
www.cheff2000.com

Enviado desde mi móvil

Reply all
Reply to author
Forward
0 new messages