FoxPro/Visual FoxPro - SLQ

 
Vista:

SLQ

Publicado por JOEL (25 intervenciones) el 10/03/2003 14:50:35
holas a los expertos
quisiera que me ayuden o me guien, primero quisiera que me pudieran explicar si las transaciones de vfp como es que trabajan, he leido un el manual de vfp, tengo dudas.En lo siguiente se que spermite grabar en conjunto los datos ( todo un bloque , y esto es bueno pero lol que no entiendo es que como en esta grabacion de bloque es que bloquea el REGISTRO A REMPLAZAR COMO SE VERIFICA ESTO Y TIENE QUE SER UNO POR UNO ES MAS SI SE hace cambios en diferentes campos primero debera cheuqear uno por uno (campo por campo de cada registro ).
debe ser asi creo.


otro duda es quesi se trabaja con transaciones y si todo se graba en conjunto esto quiere decir se puede trabajar todo el dia, y la final de trabajo realizado durante el dia se comienza a grabar la informacion en le disco duro. si fuera asi esto demoraria bastnate tiempo dependiendo de la cantidad de informacion ingresada cierto.

quisiera que me guien es esto, quisisra trabajar con transaciones, 1 por que se que es seguro en grabar, y es algo nuevo para mi, y ademas es trabajr con lo ultimo de sentencias creo yo .

gracias de antemano a los que quisieran ayudarme a enternder esto,

he leido sobre trnasaciones .
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:SLQ

Publicado por Roman Suazo (1 intervención) el 10/03/2003 15:21:35
*otro duda es quesi se trabaja con transaciones y si todo se graba en *conjunto esto quiere decir se puede trabajar todo el dia, y la final de *trabajo realizado durante el dia se comienza a grabar la informacion en *le disco duro

Esta situacion debes evitarla a toda costa, las transacciones deben ser lo mas cortas posibles de lo contrario los demas usuarios no tendran
acceso a los registro o tablas.

En cuanto a tu primera pregunta, no se entiende mucho, pero no te
deberias preocupar en como el vfp hace la transaccion (los bloqueos de registros o tablas son automaticos), lo que debes de procurar es guardar registros y no la tabla entera, asi el bloqueo solo se realiza
en cierta parte de la tabla y la transaccion es mas corta (habrar menos
conflictos con otros usuarios).

Las transacciones van asi:

Usas replace o cambias el valor de un campo, etc

&& cunado vas a guardar los cambios empezas la transaccion

BEGIN TRNASACTION

if !tableupdate()
rollback
tablerevert()
=messagebox("no se pudieron grabar los cambios",32, "Error")
else
end transaction

endif

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:SLQ- RomanZzuaso

Publicado por JOEL (25 intervenciones) el 12/03/2003 21:33:50
este pequeño ejemplo que me das lo entiendo pero
para que ponemos el begin transaccion al inicio, si escribiendo solo el tableupdate() al incio y tablerevert si se cancela la operacion SERIA LO MISMO ENTONCES ¿EL POR QUE EN BEGIN TRANSACION ?
CUAL ES SU FUNCION POR FAVOR SI ME LO EXPLICARAS

POR FAVOR

por otra parte si otro usuario al mismo tiempo tomo el mismo registro ejemplo
codigo="0001"
nombre ="JESUS ARMANDO"
telefo="221825"
al hacer tableupdate() el primer usuario graba normal pero al querer grabar el sugundo usuario vfp va ha dar error, eso se tiene que controlar, y ademas saber en campo se hizo el cambio no, esto quiere decir hacer la pregunta por cada campo que se haya editado

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:SLQ- RomanZzuaso

Publicado por Roman Suazo (2723 intervenciones) el 12/03/2003 22:11:07
El BEGIN TRANSACTION te ayuda en varias formas, ejemplo: tenes una
factura,digamos que en el caso basico una factura esta compuesta por
dos tablas:la cabecera y los detalles, en la cabecera se guardan el
nombre del cliente, numero de factura, direccion, etc En los detalles
los productos comprados, si quieres guardar los cambios correctamente, entonces ocupas que en ambas tablas se guarden los
cambios y no solo en una, es decir, de que te sirve guardar bien la
cabecera si por ejemplo no se pudieron guardar todos los productos
comprados? Entonces metes los tableupdates de ambas tablas en
un BEGIN TRANSACTION, asi te aseguras que la situacion es todo o
nada, o se guardan los cambios de ambas tablas o no se guarda nada
o sea un ROLLBACK ninguno de los tablepdate hizo efecto.

En tu segunda pregunta no hay problema todo dependeria, de las politicas que manejas para guardar cambios , es decir, guarda el primer
usuario y a continuacion los ultimos cambios se guardan por el segundo usuario 'forzando' el tableupdate (checa los atributos del tableupdate), esa es una forma, la segunda es que bloques el registro
con lock, asi el usario tiene uso exclusivo del registro hasta que salve
cambios, el problema es que un usuario puede estar mucho tiempo
bloqueando el registro asi impidiendo a otros usuarios usarlo. La otra
forma es usar oldval() y curval() antes de usar el tableupdate para asi
comprobar que no hay cambios.

Lo que te acabo de dar es a grosso modo lo que se puede hacer, hay
que considerar que el caso que sugieres muy rara vez sucederia.
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