Power Builder - Guardar en dos BD con Transaction Object

 
Vista:

Guardar en dos BD con Transaction Object

Publicado por Ana María (48 intervenciones) el 12/10/2004 19:23:24
Por favor... ando super colgada debido a que tengo q guardar un registro en dos BD con igual esquema, pero NADA q lo logro y es suepr urgente.

Ya tengo creados los Transaction object SQLCA y SQLCB, con las respectivas conexiones probadas, hasta aquí todo bien, pero cuando hago los respectivos update solo me guarda la información en SQLCA.

Lo hago de la siguiente forma:

SQLCA es la BD default, creo SQLCB que es la segunda BD, el usuario llena el datawindow (dw_tarjeta) con lainformación correspondiente y...

a=dw_tarjeta.update()
.
.
.
/* con la respectiva validaciónb=dw_tarjeta.update()
.
.
.
//Para guardar en la segunda BD
DISCONNECT USING SQLCA;
CONNECT USING SQLCB;

dw_tarjeta.settransobject(SQLCB)
b=dw_tarjeta.update() //supongo q aquí debe ir algo más....
.
.
.
/* con la respectiva validaciónb=dw_tarjeta.update()
.
.
.
Pero no me guarda en la segunda BD.... he llegado hasta a hacer la inserción y actualización con sentencias SQL de la siguiente forma:

insert into rec_tarjeta(n_serial,m_pago, num_emisiones)
values (:serial,:aux_mpago,:nemision) using SQLCB;

update rec_tarjeta
set m_pago = aux_mpago
where n_serial = :serial using SQLCB;

update rec_tarjeta
set num_emisiones = nemision
where n_serial = :serial using SQLCB;

La inserción me la hace sin problema pero la actualización NO.... ya no sé q mas hacer.

Por favor alguna idea me caería de fábula!!!!
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:Guardar en dos BD con Transaction Object

Publicado por hernan (42 intervenciones) el 12/10/2004 22:56:13
mmmm revisando todo el codigo que haz publicado deberia de guardarlo en las dos bd sin problemas, cuando dices que tienen igual esquema, te refieres que ambas tablas tienen la misma estructura y que la unica diferencia es que estan en diferentes bd, ahora la otra manera seria hacerlo con Pipeline, para esta opcion hay 2 maneras de lograrlo : manualmente o via codigo, si lo deseas por via codigo puedo adjuntarte el script para que lo implementes en tu app saludos
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:Guardar en dos BD con Transaction Object

Publicado por Ana María (48 intervenciones) el 12/10/2004 23:10:02
Ey... muchas gracias por tu colaboración, pensaba q los pipeline solo se podían manualmente... y pues de esa forma no me sirve pq debe ser por código.
Agradezco muchísimo q me adjuntes el script para hacerlo por código.
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:Guardar en dos BD con Transaction Object

Publicado por Oscar (1178 intervenciones) el 12/10/2004 23:18:16
El ejemplo clásico para insertar registros en dos BD es así:
---------------------------------------------------------------------------
//Configurar la primera BD
SQLCA.DBMS = "ODBC"
SQLCA.DBParm = "ConnectString='DSN=Sample'"

// Connectar a la primera BD
CONNECT USING SQLCA;

// Declarar y crear la segunda transaccion.
transaction SQLCB
SQLCB = CREATE TRANSACTION

// Configurar las segunda BD
SQLCB.DBMS = "Sybase"
SQLCB.Database = "Personnel"
SQLCB.LogID = "JPL"
SQLCB.LogPass = "JPLPASS"
SQLCB.ServerName = "SERVER2"

// Conectar a la segunda BD
CONNECT USING SQLCB;

// Insertar una fila a la primera BD
INSERT INTO Cliente
VALUES ( 'Cliente789', 'Sucre' )
USING SQLCA;

// Insertar una fila a la segunda BD
INSERT INTO Empleado
VALUES ( "Juan Perez", "La Paz" )
USING SQLCB;

// Desconectamos de la primera BD
DISCONNECT USING SQLCA;

// Desconectamos de la segunda BD
DISCONNECT USING SQLCB;

// Destruimos la transacción SQLCB
//No es necesario hacerlo con SQLCA, ya que
//PB lo hace automáticamente
DESTROY SQLCB
--------------------------------------------------
Nota: Como observas, luego de insertar en ambas BD, recién se desconectan ambas transacciones. Te la envió tal cual, por la urgencia que mencionas. En este momento salgo volando y no tengo la oportunidad de probarlo.
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:Guardar en dos BD con Transaction Object

Publicado por Ana María (48 intervenciones) el 13/10/2004 00:16:10
Espero no abusar de tu ayuda pero podrías indicarme cómo se haría el update?...

La inserción ya la hice.. pero el problema es q el usuario puede realizar modificaciones y estas no me las está haciendo, lo q hago es lo siguiente:

a=dw_tarjeta.update()
//valido que se haga la actualización y/o inserción en la BD por default
DISCONNECT USING SQLCA;
CONNECT USING SQLCB;
dw_tarjeta.settransobject(SQLCB)
insert into rec_tarjeta(n_serial,m_pago, num_emisiones)
values (:serial,:aux_mpago,:nemision) using SQLCB;

update rec_tarjeta
set m_pago = aux_mpago
where n_serial = :serial using SQLCB;

commit using sqlcb;

update rec_tarjeta
set num_emisiones = nemision
where n_serial = :serial using SQLCB;

commit using sqlcb;
DISCONNECT USING SQLCB;
connect USING SQLCA;

Pero no me guarda las modificaciones en la segunda BD (SQLCB) en SQLCA no tengo ningún problema... si tienes alguna idea al respecto te agradezco mucho!
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:Guardar en dos BD con Transaction Object

Publicado por JOSE (71 intervenciones) el 14/10/2004 23:30:17
Hola te recomiendo que uses despues de actualizar un

commit ussing SQLCA y otro para commit ussing SQLCB

te quedaria algo parecido:
Abres tus respetivas Bases de Datos

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
commit ussing SQLCB
else
Rollback using SQLCA
Rollback using SQLCB
end if

Cierras la base que no necesites.

Espero que te sirva.
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