Transacoes no scriptcase

Ola Pessoal
Alguem poderia colocar exemplos do uso das macros sc_begin_transf, sc_commit e sc_rollback?

A documentacao a respeito não é muito clara.

Eu vi uma postagem de que bastaria colocar os comandos sc_exec_sql dentro dos eventos do form. Ora, se isso for o bastante, nao faz sentido ter essas macros.

Por isso, se alguem puder, cole aqui um exemplo esclarecedor sobre como usar essas macros para atualizar varias tabelas.

Abraco.

O formulário nas suas ações de IO em disco já implemetam o commit.
As macros são e podem ser usadas quando você manualmente executa. Processamento de banco de dados em lotes como faria em qualquer outro lugar.
Você tem essa necessidade?

Supondo, que deseja alterar vários registros e cria um loop para esse processamento, e precisa controlar um determinado erro que se ocorrer terá que desfazer os registros alterados até.esse.momento.

Oi Haroldo

Digamos que ao gravar um registro, eu precise realizar varias consultas e gravar informacoes em 4 ou 5 tabelas.

Por exemplo, baixar contas a pagar, debitar conta corrente, lancamentos contabeis, etc.

Digamos que durante o processamento eu verifique algum problema e desee retornar ao estado inicial.

Eu precisaria realizar um rollback de tudo, inclusive do registro da primeira tabela. Isto é, ou tudo é gravado, ou nada será gravado.

Entao, se eu usar uma stored procedure eu consigo isso. Mas no sc, se nao hover garantia de que a transacao foi completada, eu poderei ter uma transacao feita pela metade.

Nao sei se fui claro. O fato é que eu gostaria de garantir que a transacao nao vai ficar pela metade.

OI Haroldo

Outra duvida : Digamos que seja necessario gravar o ID do registro atual nas proximas 4 ou 5 tabelas.

Em que evento eu devo começar a gravar informacoes nas proximas tabelas, já pegando o numero do ID?

A principio eu imagino que o evento mais apropriado seria onAfterInsert.

Entao, se somente no onAfterInsert é que o ID estará disponivel, eu imagino que teriamos que colocar os demais comandos de inclusao dentro deste evento.

sc_exec_sql(“insert na tabela1”); sc_exec_sql(“insert na tabela 2”); etc.

O problema é em que parte eu devo colocar o commit ou rollback?

Commit sempre por último.

O rollback time que estar na condição de erro nos seus inserts e os inserts dentes de Begin e endereço transacional.

Mas ah necessidade mesmo de controlar as transações?