Selection SQL pour QReport [Resolu] - Delphi/Pascal - Programmation
Marsh Posté le 26-11-2012 à 15:32:43
Bon déjà, le coup du VENTE.COM_CODE BETWEEN 'COM_000001' AND 'COM_000002', je le sens pas Tu ferais mieux de mettre VENTE.COM_CODE IN ('COM_000001', 'COM_000002').
Par ailleurs, je vois pas comment tu peux espérer avoir le total des ventes par commercial ET avoir la liste des ventes. En SQL, va falloir faire 2 requêtes.
Marsh Posté le 26-11-2012 à 16:18:45
Pour les deux requête je m'en doutais et j'ai donc fait en fonction. Mes requêtes sont faites et en elles même fonctionnent de manière séparées sur Access. Maintenant le problème c'est d'afficher correctement sur le QReport le total par rapport au Commercial concerné.
Marsh Posté le 27-11-2012 à 10:00:11
Ben pour le total par commercial :
SELECT VENTE.COM_CODE AS cle, COMMERCIAUX.COM_NOM, COMMERCIAUX.COM_PRENOM, SUM(VEN_PRIX) AS TOTAL
FROM COMMERCIAUX LEFT JOIN VENTE ON COMMERCIAUX.COM_CODE = VENTE.COM_CODE
WHERE VENTE.COM_CODE IN ('COM_000001', 'COM_000002') AND (VEN_DATE BETWEEN #11/11/12# AND #11/11/12#)
GROUP BY VENTE.COM_CODE, COM_NOM, COM_PRENOM
Ca devrait le faire.
Marsh Posté le 27-11-2012 à 10:45:38
en fait j'ai trouvé une autre solution. je fait un affichage normal et sur le QReport j'utilise un QRexpr qui fait la somme des ventes et qui se réinitialise après avoir été imprimé. un nouveau problème est venu en même temps que la résolution de l'autre.
Code :
procedure TFormAffEditionVenteParComm.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
FormEditionVenteParComm.Query1.ParamByName('min').AsString:= FormEditionVenteParComm.DBEditDate1.Text;
FormEditionVenteParComm.Query1.ParamByName('max').AsString:= FormEditionVenteParComm.DBEditDate2.Text;
FormEditionVenteParComm.Query1.ParamByName('comdebut').AsString:= FormEditionVenteParComm.EditBtnEnregCommDebut.Text;
FormEditionVenteParComm.Query1.ParamByName('comfin').AsString:= FormEditionVenteParComm.EditBtnEnregCommFin.Text;
FormEditionVenteParComm.Query1.Active:= True;
end;
lorsque je veux afficher il me dit
"Erreur SQL générale.
Erreur de syntaxe dans la date dans l'expression
'(COMMERCIAUX.COM_CODE BETWEEN ''+ AccParam0 + '' AND ''+ AccParam1 +'')
A."
Euh...... quoi ? là j'avoue ne pas comprendre.
Marsh Posté le 27-11-2012 à 11:50:56
Je te l'ai dit, faire un between sur un code contenant des caractères et nbs, c'est pas une bonne idée
Fais plutôt ça : VENTE.COM_CODE IN ('COM_000001', 'COM_000002').
Ca veut dire que pour sélectionner les commerciaux dans l'IHM, vaudrait mieux une liste à sélection multiple.
Marsh Posté le 27-11-2012 à 17:13:29
Problème RESOLU !!! Enfin.
La requête :
Code :
SELECT VENTE.COM_CODE AS cle, COMMERCIAUX.COM_NOM, COMMERCIAUX.COM_PRENOM, VEN_DATE, CLI_CODE, VEN_PRIX
FROM COMMERCIAUX LEFT JOIN VENTE ON COMMERCIAUX.COM_CODE = VENTE.COM_CODE
WHERE (COMMERCIAUX.COM_CODE BETWEEN :comdebut AND :comfin)
AND (VEN_DATE BETWEEN :min AND :max)
GROUP BY VENTE.COM_CODE, COM_NOM, COM_PRENOM, VEN_DATE, CLI_CODE, VEN_PRIX
l'utilisation de celle-ci :
Code :
FormEditionVenteParComm.Query1.ParamByName('comdebut').AsString:= FormEditionVenteParComm.EditBtnEnregCommDebut.Text;
FormEditionVenteParComm.Query1.ParamByName('comfin').AsString:= FormEditionVenteParComm.EditBtnEnregCommFin.Text;
FormEditionVenteParComm.Query1.ParamByName('min').AsDateTime:= StrToDateTime(FormEditionVenteParComm.DBEditDate1.Text);
FormEditionVenteParComm.Query1.ParamByName('max').AsDateTime:= StrToDateTime(FormEditionVenteParComm.DBEditDate2.Text);
FormEditionVenteParComm.Query1.Active:= True;
Et dans le QReport j'utilise un QRExpr
avec comme expression : SUM(VEN_PRIX) et celui-si se réinitialise après être imprimé. Merci SergioMaster.
Marsh Posté le 26-11-2012 à 15:08:51
Bonjour,
Posons les informations.
Je travail sur Access et Delphi 5
Mes tables :
CLIENT ([U]CLI_CODE[/U], CLI_NOM, CLI_PRENOM, CLI_ADRESSE_1, CLI_ADRESSE_2, CLI_CP, CLI_VILLE, CLI_MAIL)
COMMERCIAUX([U]COM_CODE[/U], COM_NOM, COM_PRENOM)
VENTE([U]CLI_CODE, COM_CODE, VEN_DATE[/U], VEN_MOTIF, VEN_PRIX)
Souhait :
Je souhaite effectuer un affichage avec un QReport (mise en page déjà réalisée) par une requête SQL en ayant comme contrainte :
- une plage de date (du 11/11/12 au 11/11/12 pour un essai. en vrai je sélectionne les dates dans des DBEditDate)
- une plage de commerciaux (de COM_000001 à COM_000002. idem que pour les dates mais dans un DBEdit)
- récupérer un TOTAL des ventes par commerciaux
Problème :
A savoir également que le SUM(VEN_PRIX) AS TOTAL que j'utilise ne m'affiche pas un total global mais seulement le total de la dernière date vue (sur le QReport). cf image ci-dessous :
Je fait des essais de code depuis ce matin mais je ne trouve pas de solution à mon problème.
Je pense avoir bien résumé mon problème.
PS : je ne suis pas très bon en SQL (au cas où ça ne se verrai pas).
Merci à ceux qui prendrons le temps de se pencher sur mon problème
Message édité par seremei le 28-11-2012 à 17:28:22