Requete SQL parametrér avec un champ Calculé
Bonjour tout le monde,
Cela fait quelque jour que je butter sur un petit problème de filtre, en effet j'ai une requête SQL avec 4 champs simples et un Calculé, le paramétrage sur les 4 se passe très bien, mais pour le 5eme tout ce que fait ne marche pas, et je me tourne vers vous pour de l'aide, et je vous en remercie d’avance.
Voici ma requête SQL :
Code:
1 2 3 4 5 6 7 8
| SQLt := 'SELECT DISTINCT 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' |
ou :
TabEnt : Table des clients (Cd, nom,...ect)
TabFac : Table des factures(RfDoc,Cd,Ndt,Rem,Statu,Typ)
TabDat : Table pour les dates(Ndt,Dat)
TabMvP: Table des Mouvements de produit (RfDoc,Ndt,Cp,Qtn)
TabPrx : Table des prix de Produit(Cp,PxV)
Cd: Reference Client
RfDoc: reference Facture
Cp : eference Produit
Qtn : Quantité
Pxv : Prix de Vente
Rem : taux de remise Facture pour client
Ndt : N° Date
Dat : Date
Sur ma fiche "FORM" j'ai un TDbGrid "grFact",un TRadioGroup "rgFact", un TEdit "edFltr", un TButton "btFltr", une Tquery "grFact", une TDataSource "dsFact"
voila comment se présente ma procédure :
Code:
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
| procedure TForm1.btFltrClick(Sender: TObject);
var
PrmSQL,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';
Params[0].AsString := RefClt.Text;
end;
0: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = ' + QuotedStr(RefClt.Text)
+ ' and f.RfDoc = :RefDoc';
Params[0].AsString := edFltr.Text;
end;
1: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = ' + QuotedStr(RefClt.Text)
+ ' and d.Dat = :Dt';
Params[0].AsDate := StrToDate(edFltr.Text);
end;
2: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = ' + QuotedStr(RefClt.Text)
+ ' and f.Statu = :St';
Params[0].AsString := edFltr.Text;
end;
3: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = ' + QuotedStr(RefClt.Text)
+ ' and f.Rem = :Rem';
Params[0].AsFloat := StrToFloat(edFltr.Text);
end;
4: begin
PrmSQL := 'WHERE f.Statu <> "An" and f.Cd = ' + QuotedStr(RefClt.Text)
+ ' and (SUM(m.Qtn * p.PxV) * (1-(f.Rem/100))) = :Mnt'; //Mon Pb se pose ici
Params[0].AsCurrency := StrToCurr(edFltr.Text);
end;
end;
end
else ShowMessage('Veuillez saisir du texte !!!');
SQLt := 'SELECT DISTINCT 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';
with qrFact do
begin
SQL.Clear;
SQL.Text := SQLt;
Open;
end;
end; |
j’espère que j'ai bien expliquer mon problème