ExecSQL do Firedac
Tenho uma função de insert que somente escrevi, em suma, não funciona.
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:
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:
'INSERT INTO PROCESSADO_REAL(cod_sessao, grupo, tipo, operador, operacao, cst_sai_apur, cst_apur,nat_rec, vl_total) VALUES (4,''1-Receitas Totais'',''1.1-Vendas de Mercadorias Sujeitas à Alíquotas Normais'',+,''Vendas'',''01'',''01'',Sujeito a aliquotas normais,9359,32'
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:
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)
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)
'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
Curtidas 0
Melhor post
Rafael Bosco
22/02/2016
Brother, eu utilizo bastante o FireDac, e os inserts, updates, eu faço da seguinte forma:
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:
Posteriormente, em uma outra Classe, eu tenho uma função Boolean, que '' executa '' a SQL, através do FireDac:
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.
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.
GOSTEI 1
Mais Respostas
Pablo Ricardo
21/02/2016
[img]http://arquivo.devmedia.com.br/forum/imagem/229843-20160221-164858%20%281%29.png[/img]
GOSTEI 0
Pablo Ricardo
21/02/2016
os textos que não estão com '' coloquei o quotestr porém continua o mesmo erro.
GOSTEI 0
Crist
21/02/2016
Olá,
De acordo com o seu sql, o erro está neste campo fdqryNaoCumulativooperador.AsString + ',' +
Como ele vem vazio então o sql está ficando errado veja o sinal de + no seu sql.
De acordo com o seu sql, o erro está neste campo fdqryNaoCumulativooperador.AsString + ',' +
Como ele vem vazio então o sql está ficando errado veja o sinal de + no seu sql.
'INSERT INTO PROCESSADO_REAL(cod_sessao, grupo, tipo, operador, operacao, cst_sai_apur, cst_apur,nat_rec, vl_total) VALUES (4,''1-Receitas Totais'',''1.1-Vendas de Mercadorias Sujeitas à Alíquotas Normais'',+(erro) ,''Vendas'',''01'',''01'',Sujeito a aliquotas normais,9359,32'
GOSTEI 0
Pablo Ricardo
21/02/2016
Nops... retorna '+' ou '-' ou ' '. É uma string mesmo. Joguei no quoted também e não resolveu. Criei outro dataset e passei como parâmetro e funcionou, agora do primeiro jeito... impossível. Como estava com pressa não deu pra descobrir o erro.
GOSTEI 0
Pablo Ricardo
21/02/2016
Brother, eu utilizo bastante o FireDac, e os inserts, updates, eu faço da seguinte forma:
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:
Posteriormente, em uma outra Classe, eu tenho uma função Boolean, que '' executa '' a SQL, através do FireDac:
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.
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