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

Gladiston Santana gladiston em vidy.com.br
Ter Ago 9 08:57:33 -03 2016


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