Nejak mam pocit, ze se s tebou nedokazu vubec na nicem domluvit: V seznamu parametru bys mel mit jen jeden parametr se stejnym jmenem a ten v SQL muzes pouzit kolikrat chces.
Vyzerá to, že si ma zle pochopil. Ja aktívne žiadne parametre nevytváram. Čiže žiadne DataSet.Params.Add(). Zásadne vždy len poskladám SQL.Text a naraz ho priradím do FDQuery. Jediné čo občas urobím je, keď mi FireDAC vynadá, že nepozná typ parametra. Tak to doplním. Tak námatkovo som vybral na ukážku kód. Nechal som v ňom len časti kde sú parametre aby bolo vidieť o čom hovorím. Nedávam to formátovať, lebo sa to skoro nedá čítať. Opakované parametre som vyznačil tučne
.
FqryUI.SQL.Text := FqryUI.SQL.Text + N_Purge;
function TConsumption.TConsumeOw.N_Purge: string;
Result := 'SELECT GEN_ID(SETTLEMENT_ID, 1), I.FKFOCS, I.YEARS, F.FKOWNER_FLAT, F.FKSERVICEPARAMETERS,'+
' CASE'+ ' WHEN F.READFINAL > :
LASTDATE THEN :
LASTDATE'+
' CASE'+ ' WHEN F.KINDSTATE > :
KS2 THEN 0'+
' CASE'+ ' WHEN F.KINDSTATE > :
KS2 THEN 0'+
' CASE'+ ' WHEN F.KINDSTATE > :
KS2 THEN 0'+
' FROM '+ N_Initial +
' INNER JOIN '+ N_Final + ' ON (I.FKOWNER_FLAT = F.FKOWNER_FLAT)'+
function TConsumption.TConsumeOw.N_Initial: string;
Result := '(SELECT C.FKFOCS, SA.YEARS, C.FKOWNER_FLAT, DOT.FKSERVICEPARAMETERS, DOT.FKCAANALYTICOPTIONS,'+
' WHERE'+
' ((C.READING BETWEEN :
LOWERBEGIN AND :
LOWEREND)'+
' OR'+
' ((C.READING BETWEEN :
LOWEREND + 1 AND :
UPPERBEGIN - 1) AND (C.KINDSTATE = :KS1))'+
' AND (MP.YEARFROM <= :
YEARS) AND ((MP.YEARTO >= :
YEARS) OR (MP.YEARTO IS NULL)))) I';
function TConsumption.TConsumeOw.N_Final: string;
begin
Result := '(SELECT C.FKOWNER_FLAT, DOT.FKSERVICEPARAMETERS, DOT.FKCAANALYTICOPTIONS, DOT.FKSUBACCOUNTS, C.FKMETERS,'+
' CASE'+ ' WHEN C.KINDSTATE = :WITHOUTREADING THEN MP.WITHOUTREADING'+
' WHEN C.KINDSTATE = :
TAMPERING THEN MP.TAMPERING'+
' WHERE'+
' ((C.READING BETWEEN :
UPPERBEGIN AND :UPPEREND)'+
' OR'+
' ((C.READING BETWEEN :
LOWEREND + 1 AND :
UPPERBEGIN - 1) AND (C.KINDSTATE = :
KS2)))'+
' AND (MP.YEARFROM <= :
YEARS) AND ((MP.YEARTO >= :
YEARS) OR (MP.YEARTO IS NULL))) F';