Recuper ID apos inserir

Amigos, pq apos inserir um registro, no evento AfterInsert eu nao consigo pegar o ID do registro inserido por exemplo:
[id_reg] = {id};

se o evento ocorre após o insert
e outra pq nesse evento, se eu fizer um sc_redir simplesmente o registro nao grava? como se ainda precisasse de um commit?

Pra mim resolveu assim: sc_commit_trans();

Então eu preciso usar sc_commit_trans() no afterInsert antes de fazer um sc_redir é isso?

2 Curtidas

Isso mesmo, senão as transações não serao efetivadas.
Sobre o id, vc pode recuperar com um sc_lookup no evento afterinsert apontando para a sequence desse campo id, retornando o currval da sequence que será justamente o id que você criou.

1 Curtida

Select last_insert_id();

Execute essa instrução com sc_lookup

1 Curtida

No PostgreSQL após inserir utilize> RETUNING id_tabela.
para capturar o novo ID.

Att,
Paulo.

Obrigado a todos, mais só para deixar claro , eu sei recuperar um ID via banco de dados, o meu questionamento foi , porque no evento AFTERINSERT que deveria acontecer depois de INSERIR o scriptcase primeiro, não me traz o id, se eu pegar {id} nao tem nada, e segundo, se eu fizer sc_redir ele simplesmente nao grava a operacao, redireciona mais o registro nao é salvo, sendo necessario que eu primeiro faca um sc_commit_trans();

Esse foi meu questionamento, se fosse o beforeInsert ate entendo, mais no AFTER, ja nao era mais para ser necessario.

Coloca em modo debug e mostra aqui a sequência dos SQL executados

Vou fazer isso, no afterdelete algo pior acontece, mesmo colocando o SC_commit_trans(), se fizer o redir, ele redireciona e nao excluir.

No caso do delete colocando o debug:
ele mostra esse SQL antes de fazer o redir:

Mais o registro continua na tabela, mesmo no log ele tendo registrado que excluiu:

Coloque o sc_redir no evento onvalidatesuccess

Uso assim: No After Insert chamo a funcao redirect():

E no metodo php, criei essa função redirect()
Com o seguinte conteúdo:

// Grava as alterações no banco
    sc_commit_trans();

// Pega o ultimo id inserido na tabela

	sc_lookup(v_id, "SELECT MAX(id) FROM tb_dados");
	{campo_id} = {v_id[0][0]};

// O ideal é usar um where com algum campo do form 
// para caso de grande volume de acesso

// redireciona para um comprovante que recebe o id, por exemplo.
	sc_redir("../cmp/index.php",id = {campo_id});