Erro delphi [firedac][phys][ora] ora -01722: invalid number delphi

05/04/2018

0

procedure TSqlNcm.InsertNcm;
VAR
SeqCtrlNcmUf : String;
SQLInsertNcm: String;
CONEXAOfIREDAC : TDMCONEXAOFIREDAC;
begin
SeqCtrlNcmUf := ''''SEQCTRLNCMUF.NEXTVAL'''';
SQLInsertNcm := ''''INSERT INTO CTRLNCMUF CTRL '''' + sLineBreak +
''''(SEQCTRLNCMUF, NCM, NCM_DESCRICAO, MVA_AJUSTADA_4, '''' + sLineBreak +
''''MVA_AJUSTADA_7, MVA_AJUSTADA_12, MVA_AJUSTADA_17, '''' + sLineBreak +
''''MVA_AJUSTADA_18, ALIQUOTA_INTERNA, MVA_ORIGINAL) '''' + sLineBreak +
'''' VALUES (:NEW_SEQCTRLNCMUF, :NEW_NCM, :NEW_NCM_DESCRICAO, :NEW_MVA_AJUSTADA_4, '''' + sLineBreak +
'''' :NEW_MVA_AJUSTADA_7, :NEW_MVA_AJUSTADA_12, :NEW_MVA_AJUSTADA_17, '''' + sLineBreak +
'''' :NEW_MVA_AJUSTADA_18, :NEW_ALIQUOTA_INTERNA, :NEW_MVA_ORIGINAL)'''';
CONEXAOfIREDAC := TDMCONEXAOFIREDAC.Create(CONEXAOfIREDAC);
TRY
CONEXAOfIREDAC.FDQueryNcm.SQL.Clear;
CONEXAOfIREDAC.FDQueryNcm.sql.add(SQLInsertNcm) ;
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_SEQCTRLNCMUF'''').AsString := QuotedStr(SeqCtrlNcmUf);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_NCM'''').AsString := QuotedStr(vNcmFormcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_NCM_DESCRICAO'''').AsString := QuotedStr(vNcmDescricaoFormcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_AJUSTADA_4'''').AsString := QuotedStr(vMvaAjustada4Formcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_AJUSTADA_7'''').AsString := QuotedStr(vMvaAjustada7Formcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_AJUSTADA_12'''').AsString := QuotedStr(vMvaAjustada12Formcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_AJUSTADA_17'''').AsString := QuotedStr(vMvaAjustada17Formcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_AJUSTADA_18'''').AsString := QuotedStr(vMvaAjustada18Formcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_ALIQUOTA_INTERNA'''').AsString := QuotedStr(vAliquotaInternaFormcadastro);
CONEXAOfIREDAC.FDQueryNcm.ParamByName(''''NEW_MVA_ORIGINAL'''').AsString := QuotedStr(vMvaOriginalFormcadastro);
CONEXAOfIREDAC.FDQueryNcm.ExecSQL; // procedimento nativo do FireDac
FINALLY
FreeAndNil(CONEXAOfIREDAC);
END;
end;
Eu queria saber o que posso melhorar e por que geralmente da esse erro?
Gustavo Souza

Gustavo Souza

Responder

Posts

05/04/2018

Vinicius Diniz


procedure TSqlNcm.InsertNcm;
SeqCtrlNcmUf : String;
SQLInsertNcm: TStringList;
CONEXAOfIREDAC : TDMCONEXAOFIREDAC;
begin
SeqCtrlNcmUf := ''''SEQCTRLNCMUF.NEXTVAL'''';

TRY

// Aqui utilizaria um string list para nao ter que concatenar tantas vezes uma string
SQLInsertNcm := TStringList.Create;
SQLInsertNcm.Add('INSERT INTO CTRLNCMUF CTRL ');
SQLInsertNcm.Add('(SEQCTRLNCMUF, NCM, NCM_DESCRICAO, MVA_AJUSTADA_4,');
SQLInsertNcm.Add('MVA_AJUSTADA_7, MVA_AJUSTADA_12, MVA_AJUSTADA_17, ');
SQLInsertNcm.Add('MVA_AJUSTADA_18, ALIQUOTA_INTERNA, MVA_ORIGINAL) ');
SQLInsertNcm.Add(' VALUES (:NEW_SEQCTRLNCMUF, :NEW_NCM, :NEW_NCM_DESCRICAO, :NEW_MVA_AJUSTADA_4, ');
SQLInsertNcm.Add(' :NEW_MVA_AJUSTADA_7, :NEW_MVA_AJUSTADA_12, :NEW_MVA_AJUSTADA_17, ');
SQLInsertNcm.Add(' :NEW_MVA_AJUSTADA_18, :NEW_ALIQUOTA_INTERNA, :NEW_MVA_ORIGINAL)');
CONEXAOfIREDAC := TDMCONEXAOFIREDAC.Create(CONEXAOfIREDAC);

CONEXAOfIREDAC.FDQueryNcm.SQL.Clear;
CONEXAOfIREDAC.FDQueryNcm.sql.AddStrings(SQLInsertNcm) ;



Com relação ao erro, já verificou se no insert que vc está fazendo nesta tabela, todos os campos são varchar ou char
pois você está inserido strings e o erro diz o campo deveria receber um inteiro. Provavelmente o campo deve ser a
coluna da sua chave primaria.
Espero ter ajudado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar