Ola Bom Dia a Todos estou precisando controlar os 3 evento citado no titulo dentro do SC, estou utilizando um Botão PHP para rodar alguns scripts y uso o sc_exec_sql, mais como sabem não eh possível obter Informações sobre essa macro, como ser si foi ou não bem sucedido o SQL y que me retorne o erro si foi negado o SQL, alguém tem alguma dica de como poderia fazer dentro do SC esse controle, nem que seja algo manual, eh que preciso muito controlar isso.
Alguém?
Já tentou usando Stored Procedures do Form?
Desculpa minha ignorância Sr. Haroldo, mais por acaso esses SP que o Sr. comenta seria a Opção Procedures que esta em Formulário??
Si for esse o caso eles não são apenas accionados pelos evento de gravar, deletar y atualizar do SC desabilitando o método padrão??
Sim.
Achei que seriam esses. Mas no caso do sc_exec_sql talvez você mandando executar uma stored procedure,que fará o insert, deletel update, captura o handling e grava numa tabela temporária.
Após a execução ler essa tabela para saber se houve erro em seguida limpar esse erro.
mmm tem razão vou testar isso pra ver si da resultado, pois meu problema maior eh exatamente capturar o error…
por que si foi ou não inserido , deletado ou modificado o registro e fácil basta com fazer um count(*) y feito, mais realmente o que me interessa e o erro…
vou testar y aviso si foi possível…
Tem a macro sc_error_continue(“Evento”), dá uma olhadinha no help do SC, acredito que ela só funcione com os eventos de formulário.
Outra opção é usar a classe do próprio SC que lida com o banco se não me engano é $this->Db->ErrorMsg(), voc~e deve conseguir ver o retorno desse método.
O problema e que eu estou usando um Botão PHP Saulo dai o sc_error_continue não funciona nele…
Vou testar também o $this->Db->ErrorMsg() para ver o que ele me diz
Se funcionar poste a solução
O coisinha mais chata viu, mais ta ai teve resultado…
Explico…
1- Criar Botão PHP — OK
2- Executar SQL – OK
3- Capturar Mensagem de erro que posa ser gerada – OFF
Então com a ajuda dos companheiros cheguei ao resultado , meio que bem manual mas funcional :D…
3- Capturar Mensagem de erro que posa ser gerada – OK
$sql = "update produtos set id_produto = 130"; //meu sql de exemplo bem basico para provar , o id_producto e Pk y esta em Fk em outras tabelas por tanto não e positivável fazer esse sql
$nm_select = $sql;
$rf = $this->Db->Execute($nm_select); //no fundinho de tudo..., isto e o que o sc_exec_sql faz
if ($rf === false) // aqui verifica se ouve erro
{
?><script>alert('<?php echo $this->Db->ErrorMsg();?> ');</script><?php //aqui eu pego o erro y jogo na tela com Alert pra ficar mais bonitinho
$this->NM_rollback_db(); //rollback :-)
sc_exit(sel); //y por ultimo si ouve o erro para que retorne ao meu formulario
}else{
$rf->Close(); // si foi bem sucedido o sql fazer o close :-)
}
Pros = Manipular y analisar o erro que era o meu caso, longa historia “DBA meio loco fez muita coisa esquisita com erros :-)”
Devolve erros de , Fks, Primarios, Triggers, etc.
Contras = Tem que ser verificado y testado a cada versão nova do SC para ver si não foi trocada a forma de usar o Db->Execute…
Si for informado uma coluna erronea sei la tipo em vez de id_meucampo coloquei id-meucampo no SQL ele não acusa erro.
Ufa maravilha, vou ate dormir sonhando com Mensagems de erros hoje
constrqi uma biblioteca, se houver alteração por parte do sc só mudar acertar a biblioteca e regerar todas apps.
Sim exato…
Pessoal, boa tarde!! Desculpe reabrir este tópico mas é que estou com a mesma necessidade.
Tentei usar o exemplo do Willian mas não deu certo. Ele até não insere o registro mas não me apresenta o erro, no caso, o alert.
Obrigado
Existem vários eventos no SC 8.1 para controlar os eventos dos botões, e o Ajax também você pode usar o sc_lookup simulando o update, delete, insert que deseja,
e já retornar o erro desejado para o usuário, ou validar e deixar o botão executar, depois pode colocar um ‘label’ também no formulário para exibir algum resultado do
botão que foi usado.
Antigamente nas versões anteriores não existiam tantos eventos, ai tínhamos que fazer mais ‘gambiarras’.
Consegui usar o exemplo do Willian. Acho que devo ter esquecido de algo na hora. Agora está funcionando perfeitamente.