Boa noite srs. Existe alguma rotina de tratamento de erro de banco de dados ( no meu caso mysql )? Nas linguagens em que trabalhei ( com bancos sybase e oracle), cada sql executado era seguido de um teste de retorno ( ex.: if sqlcode = 0 foi tudo bem, if sqlcode = 100 registro não encontrado e etc…). Com isso era mantido a integridade dos dados. Existe algo no scriptcase que eu possa usar com esta finalidade?
Desde já agradeço toda a ajuda possível.
Pode usar o SQL Builder dentro do próprio SC, ai cria o SQL e já vê o resultado, terminando só copiar e usar onde você precisar.
Mas eu prefiro usar o HeidiSQL é Free:
https://www.heidisql.com/
Boa tarde Jailton, obrigado pela atenção.
Acredito que eu não coloquei de forma muito clara a minha necessidade, eu gostaria de testar o retorno da query.
O teste teria de ser feito no script.
Nos exemplos abaixo, o sqlcode seria o código de retorno da execução da query.
$SQL = “update tabela set campo = ‘TESTE’, where campo_chave = variavel_chave”;
sc_exec_sql($SQL);
IF sqlcode == 0 {
mensagem de sucesso
} ELSE
{
mensagem de erro
RETURN
}
//////////////////////////////////////////////////////////////////////
$sql = “INSERT tabela (campo_chave1 = chave1, campo_chave2, nome, email) VALUES (var_chave1, var_chave2, ‘fulano’, ‘xxx@xxx.com’)”;
sc_exec_sql($SQL);
IF sqlcode == 0 {
mensagem de sucesso
} ELSE
{
IF sqlcode == 110 {
mensagem de erro ( ex: Chave duplicada )
RETURN
}
ELSE {
IF sqlcode == -193
mensagem de erro ( ex: Erro de FOREIGN KEY)
}
}
Em todos os bancos de dados existe return code para cada operação, a pergunta é como e se pode tratá-las em tempo de execução no script case.
Novamente agradeço pela ajuda.
Obrigado.
Essa macro não retorna valores nem possui controle de erro, você teria que usar a macro sc_lookup antes de atualizar ou inserir para
verificar que vai dar certo a operação.
Tópico antigo, sobre validar retorno para sc_exec_sql(
https://forum.scriptcase.com.br/index.php?topic=7173.0
E no manual da versão NOVA continua do mesmo jeito sem tratamento de retorno:
https://www.scriptcase.com.br/docs/pt_br/v9/manual/14-macros/01-visao-geral/#sc_exec_sql
Ou fazer esse controle usando triggers e procedures pelo próprio banco de dados que te daria o retorno da operação, e pode chamar no SC:
https://www.scriptcase.com.br/docs/pt_br/v9/manual/06-aplicacoes/04-aplicacao-formulario/11-procedures/
Americano,
Andei dando uma pesquisada…
Tenta usar a Classe interna do SC para fazer isso, veja se vai dar certo:
$sql ="
UPDATE
produtos
SET
ProdutoID = 122
";
$nm_select = $sql;
$rf = $this->Db->Execute($nm_select); // Classe Interna do SC que executa o SQL.
if ($rf === false) { // Caso der erro…
$_erro=$this->Db->ErrorMsg(); // Aqui esta o código do erro.
$this->NM_rollback_db(); // Cancela todas as atualizações de SQL.
} else {
$rf->Close(); // Se tudo deu certo… fecha a conexão da tabela.
}
sc_commit_trans();