Power Builder - dudas, commit using sqlca

 
Vista:

dudas, commit using sqlca

Publicado por Marcela (1 intervención) el 20/06/2004 04:44:02
dudas sobre ussing SQLCA

Hola!
Tengo una duda cuando actualizo.
Tengo que actualizar dos tablas casi al mismo tiempo,
y si no se actualiza la tabla1 por alguna razon
no debe actualizarse tampoco la tabla2.
mi codigo es mas o menos asi:

li_est1=dw_1.update() //de la tabla1,
if li_est=1 then
li_est2=dw_2.update() //de la tabla2,
if li_est2=1 then
commit ussing SQLCA
else
Rollback using SQLCA
end if

Es suficiente este codigo para que actualice las dos o ninguna?
Gracias
Marce
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:dudas, commit using sqlca

Publicado por Dante Balandrano A. (17 intervenciones) el 20/06/2004 10:24:28
Hola Marcela, te recomiendo que despues de las condicionantes de los IF's pongas el rollback; y un mensaje de personalizado (messagebox) para que veas el error que te marca. Tal vez te falte llenar algún campo de la PK de alguna de las tablas, y si es asi, te recomiendo que las llenes en el updatestart de las DW's ya que si tu aplicacion es cliente - servidor podrias tener problemas al actualizar tus datos. saludos! espero que resuelvas tus problema.
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:dudas, commit using sqlca

Publicado por Oscar (1178 intervenciones) el 20/06/2004 17:19:53
Cuando se trata de actualizar dos DW (ejemplo Maestro/Detalle) y para nosotros sólo la actualización de ambos representa una transacción completa; entonces se debe anidar dos Update() uno detrás del otro y dentro del segundo un COMMIT para ambos.
Esto sería cierto si no se pudiera dar el caso de que: el Update() externo se ejecute correctamente; mientras que el interior generase un error.

Para poder evitar este problema, en el libro: "SQL Server y PB" de Gustavo Coronel", recomienda el uso de dos argumentos más de la función Update(): AcceptText y ResetFlags. Cuya sintaxis es:

dw_1.Update(AcceptText, ResetFlags)

El primer argumento si está en TRUE, forza que en el objeto se haga una validación de la celda de Edición. El segundo, cuando está en TRUE, inicializa todos los indicadores de modificación y si está en FALSE no lo hace.

Entonces, la solución al problema es el siguiente script:

//Actualiza, realizando las validaciones pero sin tocar los indicadores
IF dw_maestro.Update(True,False)=1 THEN
IF dw_detalle.Update()=1 THEN
//Actualizando todos los cambios
COMMIT;
//Inicializa en el dw_maestro los indicadores
dw_maestro.ResetUpdate()
ELSE
//Se deshacen ambas actualización
ROLLBACK;
END IF
ELSE
//Se deshace la primera actualización
ROLLBACK;
END IF
//---------Fin-----
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

Gracias,

Publicado por Marcela (119 intervenciones) el 25/06/2004 01:59:34
Bueno Dante y Oscar, muchas gracias por las aclaraciones
voy a ponerlas en practica.
Marcela
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