[Resolu]Selection SQL pour QReport

Selection SQL pour QReport [Resolu] - Delphi/Pascal - Programmation

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 :

Code :
  1. SELECT VENTE.COM_CODE AS cle, COMMERCIAUX.COM_NOM, COMMERCIAUX.COM_PRENOM, VEN_DATE, CLI_CODE, VEN_PRIX, SUM(VEN_PRIX) AS TOTAL
  2. FROM COMMERCIAUX LEFT JOIN VENTE ON COMMERCIAUX.COM_CODE = VENTE.COM_CODE
  3. WHERE ((VENTE.COM_CODE BETWEEN 'COM_000001' AND 'COM_000002') AND (VEN_DATE BETWEEN #11/11/12# AND #11/11/12#))
  4. GROUP BY VENTE.COM_CODE, COM_NOM, COM_PRENOM, VEN_DATE, CLI_CODE, VEN_PRIX


 
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 :
 
http://data.imagup.com/10/1168589241.netpng
 
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
Reply

Marsh Posté le 26-11-2012 à 15:08:51   

Reply

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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é.

Reply

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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.

Reply

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. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed