DISTINCT et GROUP BY sont incompatibles !
Tu devrais avoir un message d'erreur SQL
Tu dois d'abord générer le SQL et l'affecté à SQL.Text
Cela m'étonne aussi que Params[0] ne provoque pas un Index of bouns
Puis tu peux fournir les paramètres
il faut faire le code en deux parties
Ensuite, c'est un HAVING qu'il faut utiliser dans ce cas et non un WHERE
Et un HAVING avec un paramètre, je n'ai encore jamais essayé
Voici à quoi devrait ressembler le code, je te laisse corriger les erreurs de syntaxe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| procedure TForm1.btFltrClick(Sender: TObject);
var
PrmSQL, PrmSQL2,SQLt: String;
begin
if Trim(edFltr.Text) <> '' then
begin
case rgFact.ItemIndex of
-1: begin
ShowMessage('Veuillez Choisir un critère !!!');
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt';
end;
0: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt ' +
+ ' and f.RfDoc = :RefDoc';
end;
1: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt ' +
+ ' and d.Dat = :Dt';
P
end;
2: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt ' +
+ ' and f.Statu = :St';
end;
3: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt ' +
+ ' and f.Rem = :Rem';
end;
4: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = :RefClt ' +
PrmSQL2 :=' HAVING (SUM(m.Qtn * p.PxV) * (1-(f.Rem/100))) = :Mnt'; //Mon Pb se pose ici
end;
end;
end
else ShowMessage('Veuillez saisir du texte !!!');
SQLt := 'SELECT f.RfDoc Référence,d.Dat Le,f.Rem Remise,'
+ '(SUM(m.Qtn * p.PxV) * (1-(f.Rem/100))) THT, f.Statu Statut '
+ 'FROM "TabEnt" e INNER JOIN "TabFac" f ON f.Cd = e.Cd '
+ ' INNER JOIN "TabDat" d ON f.Ndt = d.Ndt '
+ ' INNER JOIN "TabMvP" m ON m.RfDoc = f.RfDoc'
+ ' INNER JOIN "TabPrx" p ON p.Cp = m.Cp '
+ PrmSQL
+ ' GROUP BY f.RfDoc,d.Dat,f.Rem,f.Statu';
+ PrmSQL2
with qrFact do
begin
SQL.Clear;
SQL.Text := SQLt; -- C'est ici que Params[0] et Params[1] sont créés et deviennent disponible !
case rgFact.ItemIndex of
-1: begin
ParamByName('RefClt').AsString := RefClt.Text;
end;
0: begin
ParamByName('RefClt').AsString := RefClt.Text;
ParamByName('RefDoc').AsString := edFltr.Text;
end;
1: begin
ParamByName('RefClt').AsString := RefClt.Text;
ParamByName('Dt').AsDate := StrToDate(edFltr.Text);
end;
2: begin
ParamByName('RefClt').AsString := RefClt.Text;
ParamByName('St').AsString := edFltr.Text;
end;
3: begin
ParamByName('RefClt').AsString := RefClt.Text;
PParamByName('Rem').AsFloat := StrToFloat(edFltr.Text);
end;
4: begin
ParamByName('RefClt').AsString := RefClt.Text;
ParamByName('Mnt').AsCurrency := StrToCurr(edFltr.Text);
end;
Open;
end;
end; |
Partager