20% OFF para compra e renovação →

Autor Tópico: Tratar erro de sql  (Lida 138 vezes)

Americano

  • Novato
  • *
  • Mensagens: 23
Tratar erro de sql
« Online: Outubro 15, 2018, 09:31:44 pm »
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.

Jailton

  • Expert
  • *****
  • Mensagens: 2717
Re:Tratar erro de sql
« Responder #1 Online: Outubro 15, 2018, 10:09:05 pm »
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.



https://translate.google.com.br/translate?sl=en&tl=pt&js=y&prev=_t&hl=pt-BR&ie=UTF-8&u=http%3A%2F%2Fwww.scriptcaseblog.net%2Ftips-on-facilitators-for-developers-part-ii%2F&edit-text=&act=url



Mas eu prefiro usar o HeidiSQL é Free:
https://www.heidisql.com/
« Última modificação: Outubro 15, 2018, 10:17:32 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Americano

  • Novato
  • *
  • Mensagens: 23
Re:Tratar erro de sql
« Responder #2 Online: Outubro 16, 2018, 04:15:55 pm »
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.


Jailton

  • Expert
  • *****
  • Mensagens: 2717
Re:Tratar erro de sql
« Responder #3 Online: Outubro 16, 2018, 04:31:44 pm »
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/
« Última modificação: Outubro 16, 2018, 04:47:49 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Jailton

  • Expert
  • *****
  • Mensagens: 2717
Re:Tratar erro de sql
« Responder #4 Online: Novembro 03, 2018, 01:06:23 pm »
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();

O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.