Fórum ExecSQL do Firedac #546391
21/02/2016
0
fdqryGeneric.Active := False;
fdqryGeneric.SQL.Clear;
fdqryGeneric.SQL.Add('DELETE FROM PROCESSADO_REAL WHERE COD_SESSAO =' +
IntToStr(CodSessao));
fdqryGeneric.ExecSQL;
fdqryGeneric.Active := False;
fdqryGeneric.SQL.Clear;
fdqryGeneric.SQL.Add('INSERT INTO PROCESSADO_REAL(' +
'cod_sessao, grupo, tipo, operador, operacao, cst_sai_apur, cst_apur,' +
'nat_rec, vl_total) VALUES (' + IntToStr(CodSessao) + ',' +
QuotedStr(fdqryNaoCumulativogrupo.AsString) + ',' +
QuotedStr(fdqryNaoCumulativotipo.AsString) + ',' +
fdqryNaoCumulativooperador.AsString + ',' +
QuotedStr(fdqryNaoCumulativooperacao.AsString) + ',' +
QuotedStr(fdqryNaoCumulativocst_sai_apur.AsString) + ',' +
QuotedStr(fdqryNaoCumulativocst_apur.AsString) + ',' +
fdqryNaoCumulativonat_rec.AsString + ',' +
FloatToStr(fdqryNaoCumulativovl_total.AsFloat));
fdqryGeneric.ExecSQL;Fica assim a slq.text:
Percebe-se que o quotestr não funciona. Um amigo falou que quando ele passa ele tira as aspas duplas, que nesse ponto está tranquilo. Porém o erro em si:
'Erro:
[FireDAC][Phys][PG][libpq] ERROR: syntax error at end of input'.
Process FacGestao.exe (1568)
Thread Exit: Thread ID: 3224. Process FacGestao.exe (1568)
First chance exception at $7664D928. Exception class Exception with message
'Erro:
[FireDAC][Phys][PG][libpq] ERROR: syntax error at end of input'.
Process FacGestao.exe (1568)
First chance exception at $7664D928. Exception class Exception with message
'Erro:
[FireDAC][Phys][PG][libpq] ERROR: syntax error at or near ","'.
Process FacGestao.exe (1568)
Pablo Ricardo
Curtir tópico
+ 0Post mais votado
22/02/2016
Criei uma classe chamada TSQL, e nela eu coloco diversas funções que resultam nas SQLs que eu quero, depois, utilizo elas, exemplo do seu insert:
]
class function TSQL.InsertAlgoSQL: String;
begin
Result := 'INSERT INTO PROCESSADO_REAL' + sLineBreak +
'(COD_DESSAO, GRUPO, TIPO, OPERADOR, OPERACAO, CST_SAI_APUR,' + sLineBreak +
'CST_APUR, NAT_REC, VL_TOTAL)VALUES' + sLineBreak +
'(:COD_DESSAO, :GRUPO, :TIPO, :OPERADOR, :OPERACAO, :CST_SAI_APUR,' + sLineBreak +
':CST_APUR, :NAT_REC, :VL_TOTAL)';
end;
// os dois pontos em questão, são os parâmetros da SQL
Posteriormente, em uma outra Classe, eu tenho uma função Boolean, que '' executa '' a SQL, através do FireDac:
function InsertAlgo: System.Boolean;
begin
try
fQuery.SQL.Clear;
fQuery.SQL.Add(TSQL.InsertAlgoSQL);
// Parâmetro da SQL
fQuery,ParamByName('COD_DESSAO').AsInteger := CodDessao;
fQuery,ParamByName('GRUPO').AsString := Grupo;
fQuery,ParamByName('TIPO').AsString := Tipo;
fQuery,ParamByName('OPERADOR').AsString := Operador;
fQuery,ParamByName('OPERACAO').AsString := Operacao;
fQuery,ParamByName('CST_SAI_APUR').AsString := CstSaiApur;
fQuery,ParamByName('CST_APUR').AsString:= CstApur;
fQuery,ParamByName('NAT_REC').AsString := NatRec;
fQuery,ParamByName('VL_TOTAL').AsCurrency := VlTotal;
fQuery,ExecSQL;
fQuery.Connection.Commt;
Result := System.True;
except
raise;
end;
end;
Acredito que dessa forma, o código fique mais Clean, e manutenção fique mais fácil, sem contar que você pode controlar os parâmetros através das variaveis, e não diretamente na SQL.
Rafael Bosco
Gostei + 1
Mais Posts
21/02/2016
Pablo Ricardo
Gostei + 0
21/02/2016
Pablo Ricardo
Gostei + 0
21/02/2016
Pablo Ricardo
Gostei + 0
22/02/2016
Pablo Ricardo
Criei uma classe chamada TSQL, e nela eu coloco diversas funções que resultam nas SQLs que eu quero, depois, utilizo elas, exemplo do seu insert:
]
class function TSQL.InsertAlgoSQL: String;
begin
Result := 'INSERT INTO PROCESSADO_REAL' + sLineBreak +
'(COD_DESSAO, GRUPO, TIPO, OPERADOR, OPERACAO, CST_SAI_APUR,' + sLineBreak +
'CST_APUR, NAT_REC, VL_TOTAL)VALUES' + sLineBreak +
'(:COD_DESSAO, :GRUPO, :TIPO, :OPERADOR, :OPERACAO, :CST_SAI_APUR,' + sLineBreak +
':CST_APUR, :NAT_REC, :VL_TOTAL)';
end;
// os dois pontos em questão, são os parâmetros da SQL
Posteriormente, em uma outra Classe, eu tenho uma função Boolean, que '' executa '' a SQL, através do FireDac:
function InsertAlgo: System.Boolean;
begin
try
fQuery.SQL.Clear;
fQuery.SQL.Add(TSQL.InsertAlgoSQL);
// Parâmetro da SQL
fQuery,ParamByName('COD_DESSAO').AsInteger := CodDessao;
fQuery,ParamByName('GRUPO').AsString := Grupo;
fQuery,ParamByName('TIPO').AsString := Tipo;
fQuery,ParamByName('OPERADOR').AsString := Operador;
fQuery,ParamByName('OPERACAO').AsString := Operacao;
fQuery,ParamByName('CST_SAI_APUR').AsString := CstSaiApur;
fQuery,ParamByName('CST_APUR').AsString:= CstApur;
fQuery,ParamByName('NAT_REC').AsString := NatRec;
fQuery,ParamByName('VL_TOTAL').AsCurrency := VlTotal;
fQuery,ExecSQL;
fQuery.Connection.Commt;
Result := System.True;
except
raise;
end;
end;
Acredito que dessa forma, o código fique mais Clean, e manutenção fique mais fácil, sem contar que você pode controlar os parâmetros através das variáveis, e não diretamente na SQL.
Foi justamente assim que fiz, passando parâmetros já que não encontrei o erro que estava dando. Muito obrigado pela resposta.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)