[firebase-br] Como prevenir o erro "Arithmetic exception, numeric overflow, or string truncation. string right truncation."

Luciano franca luapfirebird em yahoo.com.br
Ter Ago 9 16:01:00 -03 2016


E como seria essa SP  você poderia me mostar uma SP simples apenas disparando um Exception caso o tamanho da String seja maior que o campo
pois em meus testes aqui a SP funciona igual a Trigger e não consegue ser disparado antés de dar o erro "Arithmetic Exception" 

    Em Terça-feira, 9 de Agosto de 2016 8:57, Gladiston Santana <gladiston em vidy.com.br> escreveu:
 

 Do mesmo jeito que já vem fazendo, veja um exemplo:
  m:=TFDQuery.Create(Self);  m.Connection:=q1.Connection;  m.SQL.Clear;
  m.SQL.Add('SELECT result_value FROM SP_CLASSIFICACAO_CV(');  m.SQL.Add(QuotedStr(Operacao)+',');  // INCLUIR,ALTERAR,EXCLUIR,CONSULTAR  m.SQL.Add(QuotedStr(CLASSIFICACAO.Text)+',');    m.SQL.Add(QuotedStr(tipo_cv.Text)+',');  m.SQL.Add(QuotedStr(Trim(DESCRICAO.text))+',');  m.SQL.Add(QuotedStr(TEXTO_EXPLICATIVO.Lines.Text)+',');  m.SQL.Add(FBSQLNUMBER(PERC_PIS_COFINS.Value,2)+',');  m.SQL.Add(FBSQLNUMBER(PERC_LUCRO.Value,2)+',');  m.SQL.Add(QuotedStr(SimNao(se_servicos.Checked,'-','S','N'))+',');  m.SQL.Add(QuotedStr(SimNao(SE_RT.Checked,'-','S','N'))+',');  m.SQL.Add(QuotedStr(SimNao(SE_RT_ENGENHARIA.Checked,'S','S','N'))+',');  m.SQL.Add(QuotedStr(SimNao(STATUS.Checked,'-','C','A'))+');');  try    m.open;    sResult:=m.FieldbyName('result_value').AsString;    Result:=(sResult<>'');    if not Aplicado      then Aplicado:=Result;    if Assigned(q1.Connection) then    begin      if q1.Connection.InTransaction        then q1.Connection.CommitRetaining;    end;  except  on e:exception do     begin        ExibeErro('Erro ao executar o procedimento:',e.message,m.SQL.Text);     end;  end;  m.Close;  FreeAndNil(m);
Se puder ser parametrizada do jeito que você faz melhor ainda.Outra vantagem que não mencionei são as permissões, você dá permissão do usuário à procedure, e não precisa se preocupar com as permissões do usuários às tabelas envolvidas. Claro que dará permissão às tabelas à procedure, mas isso se faz uma única vez e tais grant podem ficar em forma de comentário dentro da procedure caso precise aplicá-las novamente.

  


Mais detalhes sobre a lista de discussão lista