PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Exemplo de Commit e Rollback usando 2 procedures
Exemplo de Commit e Rollback usando 2 procedures
Started by BOLLER, Mar., 28 2020 2:36 PM - 2 replies
Registered member
3,651 messages
Popularité : +175 (223 votes)
Posted on March, 28 2020 - 2:36 PM
Procedure inicial

// Summary: <specify the procedure action>
// Syntax:
// Evento_Gravar ()
//
// Parameters:
// None
// Return value:
// None
//
// For instance:
// Indicate an example.
//
Procedure Evento_Gravar()

HTransactionStart(MyHfsql01,"T032_Usuarios,T034_UsuarioXDiretiva")

ScreenToFile()

ok is boolean

erro is int

IF gs_Acao = "Incluir" THEN
//T032_Usuarios.T032_Usuarios_ID = GET_SEQ(T032_Usuarios) // numerador automatico feito via sequence no banco oracle/postgresql se usar hfsql pode remover essa linha
ok = HAdd(T032_Usuarios)
IF ok = False THEN
erro++
END
ELSE IF gs_Acao = "Alterar"
ok = HModify(T032_Usuarios)
IF ok = False THEN
erro++
END
END

IF ok = True THEN
erro += SecWin_CadastraUsuarioXDiretiva(T032_Usuarios.T032_Usuarios_ID, T032_Usuarios.T032_Login)
END

IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
ELSE
HTransactionCancel(MyHfsql01) //rollback
END

TableDisplay(TABLE_T032_Usuarios,taInit)

{gs_NameWindow,indWindow}..Plane = 1

gs_Acao = ""

gn_Id = 0



// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] SecWin_CadastraUsuarioXDiretiva (<gUsuarioID>, <gLogin>)
//
// Parameters:
// gUsuarioID:
// gLogin: <specify the role of gLogin>

Procedure SecWin_CadastraUsuarioXDiretiva(gUsuarioID, gLogin)

erro is 8-byte int = 0

FOR EACH T034_UsuarioXDiretiva
IF T034_UsuarioXDiretiva.T032_Usuarios_ID = gUsuarioID THEN
IF HDelete(T034_UsuarioXDiretiva) = False
erro++
END
END
END


FOR EACH T033_Diretivas

T034_UsuarioXDiretiva.T032_Usuarios_ID = gUsuarioID
T034_UsuarioXDiretiva.T034_Login = gLogin
T034_UsuarioXDiretiva.T033_Diretivas_ID = T033_Diretivas.T033_Diretivas_ID
T034_UsuarioXDiretiva.T034_Janela = T033_Diretivas.T033_NomeJanela
T034_UsuarioXDiretiva.T034_Status = 1
IF HAdd(T034_UsuarioXDiretiva) = True
erro++
END

END

RESULT erro


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Registered member
3,651 messages
Popularité : +175 (223 votes)
Posted on March, 28 2020 - 2:39 PM
IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
Info("Gravou com sucesso!")
ELSE
HTransactionCancel(MyHfsql01) //rollback
Info("Procedimento cancelado")
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Registered member
3,651 messages
Popularité : +175 (223 votes)
Posted on March, 28 2020 - 2:50 PM
É possivel tambem ter variaveis auxiliares para contabilizar erros e tempo de execução

datahoraInicial is datetime = DateSys() + TimeSys()

transactionsstart(...........)

erro += proc01( )
erro += proc02( )

datahorafinal is datetime = DateSys() + TimeSys()

//ip do terminal ou login reservar

IF ErrorInfo() <> 0
erro++
END


IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
Info("Gravou com sucesso!")
ELSE
HTransactionCancel(MyHfsql01) //rollback
Info("Procedimento cancelado")
END

Log(Login, datahoraInicial , datahorafinal, erro )


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/