[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