Comando FLUSH

179 views
Skip to first unread message

Manuel Medina

unread,
Sep 1, 2022, 12:47:32 AM9/1/22
to Comunidad de Visual Foxpro en Español
Saludos, gracias y las ayudas que puedan darme.

He estado probando un form de facturación y estando trabajando por 3 horas sin   interrupción de la energía eléctrica a la hora de ir a hacer el cuadre no hay un solo  registro guardado.

    SELECT ingresos
    APPEND BLANK
    replace condicion WITH thisform.condicion.Value
    replace factura WITH thisform.factura.Value
    replace fecha WITH thisform.fecha.Value
    replace hora WITH TIME()
    FLUSH
¿Que podrá estar pasando mis amigos.?

Saludos.     

Carlos Miguel FARIAS

unread,
Sep 1, 2022, 6:47:57 AM9/1/22
to Grupo Fox
Ingresos es una tabla o un cursor?
Porque no pruebas con INSERT INTO (1 sola instrucción contra todas esas que escribistes), el APPEND BLANK agrega un registro en blanco, eso implica que los campos claves están en blanco, si tienes un registro en blanco "colgado" en la tabla, te puede estar rechazando los nuevos registros (tienes instrucciones de captura de errores?).
Probaste de verificar la tabla luego de una agregado?
Saludos: Miguel

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/eb1d58ab-2fed-494f-998f-f6374a6ec0fan%40googlegroups.com.

ggcagnola gmail

unread,
Sep 1, 2022, 6:54:07 AM9/1/22
to publice...@googlegroups.com

habiendo "insert into" fox no se responsabiliza de "append blank"...

Damian Lana

unread,
Sep 1, 2022, 7:30:55 AM9/1/22
to publice...@googlegroups.com
Buenos días, verifica esto 
1)Si no tenes nada de nada, verifica otras tablas, puede ser que estés trabajando en modo sandbox.
2) si es esa tabla sola puede ser que esta dañada, me ha pasado, y en esa específicamente no guarde nada. 
           - solución agregar un registro en blanco  con set tablevalidate to 0 -- en vfp9

Saludos 
Damian Lana 
Mendoza Argentina

RICARDO RAUL MOSNA

unread,
Sep 1, 2022, 7:33:15 AM9/1/22
to publice...@googlegroups.com
SELECT ingresos
    APPEND BLANK
    replace condicion WITH thisform.condicion.Value
    replace factura WITH thisform.factura.Value
    replace fecha WITH thisform.fecha.Value
    replace hora WITH TIME()
    FLUSH

yo haria 

store '' to xcondicion
store 0 to xfactura
store {} to xfecha
store 0 to xtime

store thisform.condicion.Value to xcondicion
store thisform.factura.Value to xfactura
store thisform.fecha.Value  to xfecha
store TIME() to xtime


   SELECT ingresos
    APPEND BLANK
    replace condicion WITH xcondicion
    replace factura WITH xfactura
    replace fecha WITH xfecha
    replace hora WITH xtime
    FLUSH

 teniendo en cuenta que el ingreso sea una tabla dbf, ahora si es un cursor tendria que crear readwrite tengo entendido.
espero haber ayudado

Zarlu

unread,
Sep 1, 2022, 8:50:12 AM9/1/22
to Comunidad de Visual Foxpro en Español
Buenos días Manuel!

No uso Flush. No le captó del todo. Trabajo con Buferring() y Tableupdate() y me ha funcionado bien. Desde entonces no indices y tablas dañadas.

Te comparto algunas opiniones que he leído de Flush:
"...es la unica manera compañero solo cerrando la tabla tendrás esos cambios guardados en la tabla"
"...usar FLUSH FORCE y especificar la tabla"

Un artículo sobre FLUSH:

Adicionalmente igual te sugiero cambies a usar comandos de SQL como INSERT, UPDATE, DELETE FROM.

Suerte
zarlu
Chetumal, Quintana Roo, México

Gustavo Torres

unread,
Sep 1, 2022, 8:56:43 AM9/1/22
to publice...@googlegroups.com
Jamás use ese comando y las dbf siempre se me actualizaron

ggcagnola gmail

unread,
Sep 1, 2022, 8:58:36 AM9/1/22
to publice...@googlegroups.com

me parece que antes de seguir, Manuel debería indicarnos si "ingresos" es un cursor o una dbf, si está apuntando a la misma base donde hace el insert y luego el select, etc etc etc...

Dsan

unread,
Sep 1, 2022, 10:35:25 AM9/1/22
to publice...@googlegroups.com
Este caso en particular me parece que es mas de revisar seteos:
En inicio, prgs, o load del form pon seteos...
SET MULTI LOCK ON 
SET REFRESH TO  n

 SELECT ingresos
 APPEND BLANK
RLOCK()   &&& aqui podria ampliar a                                     Do while !RLOCK()  ENDDO
Replace condicion WITH thisform.condicion.Value
Replace factura WITH thisform.factura.Value
Replace fecha WITH thisform.fecha.Value
Replace hora WITH TIME()
UNLOCK




roberto martinez andrade

unread,
Sep 1, 2022, 11:19:51 AM9/1/22
to publice...@googlegroups.com

Te recomiendo utilices :
condicion_p=thisform.condicion.value
factura_p=thisform.factura.value
fecha_p=thisform.fecha.value
hora_p=time()
INSERT INTO ingresos (condicion,factura,fecha,hora) VALUES (codicion_p,fectura_p,fecha_p,hora_p)
USER IN ingresos

Con eso se aseguras que el registro quede guardado

Las variables _p son locales y  ni siquiera hay que declararlas como tal.


Saludos
Roberto 
Coyhaique - Chile

Dsan

unread,
Sep 1, 2022, 11:59:04 AM9/1/22
to publice...@googlegroups.com

Y algo muy importante que se me olvidó mencionar
Revisa si la tabla no está ordenada,   antes de hacer el append blank si te quedas por ahí y no vía sql  insert 

Carlos Miguel FARIAS

unread,
Sep 1, 2022, 12:19:00 PM9/1/22
to Grupo Fox
El APPEND BLANK era algo necesario en dBase II, III y Foxplus, década de los '80.
Desde Foxpro tenemos el INSERT INTO desde 1990.
El APPEND BLANK es generador de alta interferencia en programas multiusuarios, es terriblemente lento (toca todos los índices de la tabla 2 veces) y desde el punto de vista de ejecución interna, son (como el ejemplo) 7 veces más instrucciones, y te puede dejar registros colgados con datos incompletos.
Cuando se efectúa un APPEND BLANK, se agrega a la tabla un registro con todos los registros "en blanco", eso implica que se cargan todos los índices de la tabla con los respectivos valores. Si otro usuario intenta hacer a la vez un APPEND, da un error de clave duplicada.
A medida que haces los replaces, en algunos de los replace te puede luego dar clave duplicada, y te aborta, pero el registro ya quedó "calzado" con datos incompletos.
En el ejemplo, logra hacer el APPEND BLANK, se guarda el registro, cuando va a hacer el replace de la factura (PK?) da error de clave duplicada, queda el registro en blanco. Otro usuario o el mismo intenta agregar otro registro, y el siguiente APPEND BLANK ya no funciona (quedó el anterior colgado "en blanco") otra vez clave duplicada.
Queremos seguir con VFP o con dbase II?

HernanCano

unread,
Sep 1, 2022, 1:28:54 PM9/1/22
to Comunidad de Visual Foxpro en Español
Si existe posibilidad de que "la electricidad se caiga", entocnes te recomiendo el uso de transacciones.
Mira los comandos y funciones sgtes en la ayuda de VFP:

ISTRANSACTABLE() Function
MAKETRANSACTABLE() Function
BEGIN TRANSACTION Command
END TRANSACTION Command
ROLLBACK Command



Dsan

unread,
Sep 1, 2022, 11:28:05 PM9/1/22
to publice...@googlegroups.com
Definitivamente que si usaramos las dbf como se usan las tablas en los motores id único, ese error es notorio, en su momento a mi me ocurrió cuando por error había ya previo  un registro en blanco.

Pos logico tiene razón,  y yo siempre lo he dicho,  para qué pasar de Foxpro 2.5 o Foxpro 6 a 9.0 si no se van a usar todas sus mejoras...  
Lo del append blank lo, sugerí para dar respuesta al error, pero la sugerencia si o si, es usar lo actual...

Saludos



Antonio Lima

unread,
Sep 2, 2022, 12:29:05 AM9/2/22
to publice...@googlegroups.com
Hola a todos,

Da igual si usas insert into o usas append blank, yo he usado siempre append blank.

Lo que ha de pasar es que estás utilizando un cursor, cuando se interrumpe el fluido eléctrico o en otras palabras se apaga el equipo, se pierden los datos.

Si fuera una tabla, al apagar el equipo o desconectarse de la red, al estar agregando registros siempre se dañan las tablas.

Sería bueno que siempre dieras más información. Yo ni conocía el comando flush, ni sabía que existía. 

Otro compañero menciona que a lo mejor estás dentro de una transacción, si es así y se apaga el equipo, tampoco guardara los cambios.

Un saludo 

HernanCano

unread,
Sep 2, 2022, 2:23:55 AM9/2/22
to Comunidad de Visual Foxpro en Español
Correcto: los cambios no se guardan, pero lo importante en las transacciones es que la info no queda inestable (dijo que luego de tres horas, había un sólo reg grabado).

Por si lo has leído en cuanto a transacciones: se graba o todo o nada.

hector appendino

unread,
Sep 2, 2022, 6:32:29 AM9/2/22
to publice...@googlegroups.com
Fíjese en los permisos que tiene como usuario en el sistema operativo

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Victor Espina

unread,
Sep 2, 2022, 8:32:57 AM9/2/22
to Comunidad de Visual Foxpro en Español
Si fuese falta de permisos de escritura daria un error con el APPEND BLANK.   Yo apuntaría a que falta un TableUpdate() o un COMMIT.  Sin mas informacion sobre si esta usando buffering o transacciones es imposible saber que pudo haber pasado.   En el pasado yo he tenido malas experiencias con transacciones que se quedaron abiertas y luego al hacer rollback de la ultima se perdía todo el trabajo de horas, especialmente en escenarios tipo maestro-detalle.

Victor Espina
Reply all
Reply to author
Forward
0 new messages