"[RESOLVIDO]" Macro sc_redir não funciona após inclusão!

Olá pessoal, estou com uma dúvida bem interessante!

Tenho um formulário de “Cadastro de Alunos”. O usuário ao inserir um novo aluno, “automaticamente” pela macro sc_redir, o sistema passa para o próximo formulário, no caso o de “Matrícula”. A macro realmente após o INSERT esta redirecionando para o próximo formulário, porém NÃO esta inserindo os dados no Banco de Dados Mysql.

Quando eu tiro a maco sc_redir, o formulário de Cadastro de Aluno funciona beleza, adiciona no banco. Quando coloco a macro, ele direciona mas não adiciona os dados no banco.

Estou utilizando no evento onAfterInsert e testei no onValidateSuccess. Ambos redireciona, mas não da o insert.

Alguém sabe o que pode ser?

Obrigado!

1 Curtida

Fred,

Acredito que terá que dar commit antes do redir

Att,

Jocimar

Está faltando a macro sc_commit_trans (“Conexão”)

Nas aplicações de formulário, em eventos que cotenham qualquer macro que dependa de atualização na base de dados (sc_AfterInsert, sc_AfterUpdate, sc_AfterDelete, sc_BeforeInsert, sc_BeforeUpdate ou sc_BeforeDelete) estão automaticamente protejidas por controle de transação, desde que a conexão seja a mesma da aplicação.

Caso o usuário, em alguma destes eventos, venha a utilizar um redirecionamento de aplicação (macro “sc_redir”) deverá, antes do redir, utilizar esta macro para garantir as transações efetuadas anteriormente.

O parâmetro “conexão” é opcional, sendo necessário, apenas, se o comando for executado em uma base de dados diferente da especificada para a aplicação.

1 Curtida

Já tentei com o “sc_commit();” e principalmente e com “sc_commit_trans” e não funcionou! A não ser que eu não tenha colocado no local correto. Por exemplo, coloquei no mesmo evento onAfterinsert assim:

sc_commit_trans();
sc_redir(form_matricula.php);

Será que tenho que colocar o “sc_commit_trans();” em outro local?

O local esta correto, sua aplicação só tem uma conexão?

Fui olhar uma aplicação minha e tem sc_commit_trans (""); não sei se é isto.

A minha só tem uma conexão!

Testei com sc_commit_trans (""); Mas continua a mesma coisa.
Isso acontece tanto no ambiente de produção como o de desenvolvimento.

Mais alguma sugestão?

Infelizmente não tenho mais sugestões.

Fred dá ua olhadinha no código gerado pelo SC e verifica se o sc_redir esta depois do insert do banco ou dentro de alguma condição que o faça ser executado antes, aí dá pra você saber o que esta acontecendo.

Uma maneira fácil de achar pelo menos o sc_redir é buscar pelo nome da aplicação que você esta direcionando aí vai subindo a partir daí no código e descendo pra ver se você encontra o insert.

Dependendo de onde estiver você pode testar se o insert retornou algum erro ou não e aí sim executar o sc_redir, tipo:

if(!isset({sc_error_insert}){
sc_redir(“sua_aplicacao)”;
}else{
echo “{sc_error_insert}”;
}

Não testei o código acima mas pode ser que tenha algum erro no seu insert, por isso que esta direcionando porém não esta inserindo.

Notem que o uso da macro sc_commit_trans não é necessária se a intenção é redirecionar dentro de eventos pré definidos no SC, ela só é necessária se dentro de um destes eventos você precisa executar uma ação no banco como um outro insert, delete ou update e deseja que a transação seja controla impedindo que dados sejam gravados caso ocorra algum erro na conexão.

Olá Saulo, fiz como recomendado:

if(!isset({sc_error_insert})){
sc_redir(form_matricula.php);
}else{
echo ({sc_error_insert});

}

Porém ele não retorna erro algum, apenas redireciona a aplicação sem da o inserto no banco. Estou começando a achar que é Bug no SC7, visto que esse INSERT é nativo dele. Estou sem alternativas pra testar agora… =/. Você tem mais alguma sugestão?

Use a macro commit e logo depois de um window.location para ver se vai dar certo.

Se der certo ai pode ser algum erro na macro sc_redir.

Consegui resolver na unha mesmo! Usando o header (“Location:…”); Acredito que o redir na V7 esta bugado!

Olá Almeida, não testei com o “window.location”. Mas pelo que esta ocorrendo, o insert é nativo do SC não deveria esta fazendo isso. Tive que fazer de forma manual mesmo.

Muito obrigado pela ajuda, obrigado a todos!

Boa noite,

Vou verificar este problema com nossa equipe de bugs.

att,
Bernhard Bernsmann

Para funcionar é necessário utilizar a macro sc_commit_trans, caso não esteja inserindo corretamente, ligue o modo debug da aplicação e veja o comando apresentado.

Exemplo para funcionar.

sc_commit_trans();
sc_redir(grid_tb_aluno.php);

Olá Yuri, eu fiz desse mesma forma:

Exemplo para funcionar.

sc_commit_trans();
sc_redir(grid_tb_aluno.php);

Mas não resolveu!

Comente o código do macro sc_Redir, ligue o modo debug e tente incluir algum registro.

Olá Yuri, vou testar isso na próxima situação! Como resolvi de outra forma e o cliente estava pressionando eu não tive tempo de fazer esses testes.

Mas esta anotado aqui pra testes!

Obrigado!

Boa tarde pessoal, estou com o mesmo problema.
Vou executar o sc_commit_trans (“Conexão”) como sugerido e lhes retorno.

Pessoal funcionou beleza…
Eu utilizo a versão: 7.01.0021

Muito obrigado pela dica.

Pessoal, passando só para agradecer, eu também estava com o mesmo problema, já estava achando que era Bug do SC, resolvi adicionando a macro:

sc_commit_trans (“Conexão”);

antes, vale salientar que “Conexão” é opcional.

1 Curtida

Um tópico com 4 anos, muito bacana que ainda serve como ajuda. Abraço a todos.