Clarion - DUPLICATE, ROLLBACK, LOGOUT, COMMIT

 
Vista:

DUPLICATE, ROLLBACK, LOGOUT, COMMIT

Publicado por Mariana (3 intervenciones) el 23/02/2008 03:53:37
Hola a todos ! quien me puede ayudar con esto:
Tengo un procedimiento Browse junto con form de update generado con el wizard.
Todo esto es para un abm, la tabla tps correspondiente a dichos procedimientos esta formada por 20 campos y uno de ellos es la clave unica. la idea es que tiene q funcionar con muliples usuarios, es decir varios usuarios deberian poder hacer un abm (alta, baja y modificacion) d manera simultanea (al mismo tiempo) buscando en el foro encontre algunas pistas y todas me llevan a usar los comandos DUPLICATE, ROLLBACK, LOGOUT, COMMIT.
La pregunta es:
¿ como se deben usar ?
Espero que me puedan responder de manera didactica y si es posible con la explicacion de cada funcion mencionada. es decir que hace cada una de ellas.

Muchas gracias.
Mariana.
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:DUPLICATE, ROLLBACK, LOGOUT, COMMIT

Publicado por Andres Ramos (22 intervenciones) el 25/02/2008 14:47:10
Hola Mariana
Bueno el bloque de sentencias ROLLBACK, LOGOUT, COMMIT lo que hacen es asegurar una transacción.
LOGOUT marca el inicio de la transacción
ROLLBACK deshace la transacción
COMMIT Asegura la transacción
Puede utilizar la ayuda del clarion , ahí está bien explicado

Un Ejemplo
// Inicia la transaccion
LOGOUT(10, ITEMSTRANSAINVENTARIO, EXISTENCIAS,PRODUCTOSTERMINADOS)
IF ERRORCODE()
Err" = ERROR()
MESSAGE(Err")
// encuentra un error deshace la transacción
ROLLBACK
BEEP
MESSAGE('No puedo salvar sus cambios ahora.')
Thiswindow.reset(1)
SELECT(?Browse:1)
CYCLE
END
EXBO:IDORIGEN = ITTR:IDORIGENDOCITTR
EXBO:BODEGA = ITTR:BOPRINCIPAL
EXBO:IDPRODUCTO = ITTR:IDPRODUCTO
IF ACCESS:EXISTENCIASTERMINADOS.FETCH(EXBO:PKEXBOBODEGAPRODUCTO) <> LEVEL:BENIGN
EXBO:IDORIGEN = ITTR:IDORIGENDOCITTR
EXBO:BODEGA = ITTR:BOPRINCIPAL
EXBO:IDPRODUCTO = ITTR:IDPRODUCTO
PRTE:IDPRODUCTO = ITTR:IDPRODUCTO
ACCESS:PRODUCTOSTERMINADO.FETCH(SQLPRTE:PKPRTEIDPRODUCTO)
IF ERROR() THEN
MESSAGE('Error Buscabdo Producos)
ROLLBACK
EXIT
.
EXBO:DESCRIPCION = PRTE:DESCRIPCION
EXBO:INICIAL = 0
EXBO:CRFECHA = GLO:USUARIO
EXBO:CRFECHADATE = TODAY()
EXBO:CRFECHATIME = 0
IF ACCESS:EXISTENCIASTERMINADOS.INSERT() <> LEVEL:BENIGN THEN
MESSAGE('Error Insertando Existencias')
ROLLBACK
EXIT
END
ACCESS:SQL_EXISTENCIASTERMINADOS.FETCH(SQLEXBO:PKEXBOBODEGAPRODUCTO)
END
IF SQLEXBO:EXISTENCIAS < 0 THEN
MESSAGE('No Puedo Realizar Transacción Existencias Negativas')
ROLLBACK
EXIT
.
IF ACCESS:SQL_EXISTENCIASTERMINADOS.UPDATE() <> LEVEL:BENIGN THEN
MESSAGE('Error Actualizando Existencias')
ROLLBACK
EXIT
END
! Controla Stocks Producto
/ Realiza la transaccion
COMMIT

Andres Ramos
Bogota Colombia
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:DUPLICATE, ROLLBACK, LOGOUT, COMMIT

Publicado por Mariana (3 intervenciones) el 27/02/2008 03:13:59
Muchas gracias Andres ! sos muy amable ! ... me voy a poner en marcha para inerpretar tu codigo... ¿ algo sobre duplicate ? te cuento:
La tabla mencionada anteriormente tiene un campo clave sin duplicado.LO QUE NECESITO ES : evitar el mensaje de "clarion" clave duplicada y reemplazarlo por un mensaje creado por mi. a continuacion te muestro el codigo que puse en el takeComplete con pr5000.

1-Con este codigo no funciona BIEN el DUPLICATE.
2-Primero me muestra el cartel de clave duplicada de clarion. yo necesito que al detectar una clave duplicada unicamente me muestre el mensaje creado por mi.
3- I por ultimo quisiera introducir los comandos ROLLBACK, LOGOUT, COMMIT a el codigo que te muestro.

La tabla se llama STOCK.

if SELF.Request = InsertRecord ! alta

GET(STOCK,0) ! Resetea el puntero
IF DUPLICATE(STOCK) ! Si existe en la tabla entonces:
MESSAGE( 'Boton aceptar, Accion Agregar: El nº de serie ingresado ya existe en la Base de Stock, si lo desea puede intentar con otro.' ,' ATENCION',ICON:Exclamation,'Aceptar')
CLEAR (NSERIE)
SELECT (?NSERIE)
Return Level:Notify
ESLE !Si no se duplica entonces:
STO:ID = 1
STO:NSerie = NSERIE
STO:CodHarw = STOCK_COD_TIPO
STO:DescripcionHarw = GLO:DESCRIPCION_TIPO
STO:Cod_Modelo = STOCK_COD_MODELO
STO:Descripcion_Modelo = GLO:DESCRIPCION_MODELO
STO:CodUbicacion = STOCK_COD_UBICACIO
STO:DESubica = GLO:DESCRIPCION_UBICACION
STO:CDIGOESTADOELE = STOCK_COD_ESTADO
STO:DESestado = GLO:DESCRIPCION_ESTADO
STO:CodProvee = STOCK_COD_PROVEEDOR
STO:Proveedor = GLO:DESCRIPCION_PROVEEDOR
STO:CLASE = STOCK_CLASE
STO:Observaciones = STOCK_OBSERVACIONES
IF STOCK_FECHA_ALTA = ' '
STO:FehaDeAlta = (today())
else
end

END ! duplicate

ELSE ! si no es una Alta entonces es una modificacion


CLEAR(STOCK)
STO:ID = 1
STO:NSerie = NSERIE
STO:CodHarw = STOCK_COD_TIPO
STO:DescripcionHarw = GLO:DESCRIPCION_TIPO
STO:Cod_Modelo = STOCK_COD_MODELO
STO:Descripcion_Modelo = GLO:DESCRIPCION_MODELO
STO:CodUbicacion = STOCK_COD_UBICACIO
STO:DESubica = GLO:DESCRIPCION_UBICACION
STO:CDIGOESTADOELE = STOCK_COD_ESTADO
STO:DESestado = GLO:DESCRIPCION_ESTADO
STO:CodProvee = STOCK_COD_PROVEEDOR
STO:Proveedor = GLO:DESCRIPCION_PROVEEDOR
STO:CLASE = STOCK_CLASE
STO:Observaciones = STOCK_OBSERVACIONES
IF STOCK_FECHA_ALTA = ' '
STO:FehaDeAlta = (today())
else
end
Access:STOCK.Update()
put(stock)
IF NOT ERROR()
END
END !SELF.Request

Espero que me puedas ayudar, soy nueva con clarion ! Saludos y hasta pronto !!!
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:DUPLICATE, ROLLBACK, LOGOUT, COMMIT

Publicado por Andres Ramos (22 intervenciones) el 27/02/2008 15:26:15
Hola mariana espero que tu correo sea [email protected] , ahi te envie un documento de como se haria
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