Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1314 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Resolu]Selection SQL pour QReport

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]Selection SQL pour QReport

n°2165466
seremei
Posté le 26-11-2012 à 15:08:51  profilanswer
 

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
mood
Publicité
Posté le 26-11-2012 à 15:08:51  profilanswer
 

n°2165472
rufo
Pas me confondre avec Lycos!
Posté le 26-11-2012 à 15:32:43  profilanswer
 

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
n°2165480
seremei
Posté le 26-11-2012 à 16:18:45  profilanswer
 

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

n°2165575
rufo
Pas me confondre avec Lycos!
Posté le 27-11-2012 à 10:00:11  profilanswer
 

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
n°2165579
seremei
Posté le 27-11-2012 à 10:45:38  profilanswer
 

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.

n°2165585
rufo
Pas me confondre avec Lycos!
Posté le 27-11-2012 à 11:50:56  profilanswer
 

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
n°2165660
seremei
Posté le 27-11-2012 à 17:13:29  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Resolu]Selection SQL pour QReport

 

Sujets relatifs
Utilisation d'une variable dans un appel de SQL (avec un "@" )Resolu :Sql : probleme de requete (Subquery returns more than 1 row)
Appeler fichier SQLRemplir une base MySQL avec une base SQL
Requete SQLscript copie de fichiers avec selection source et dest
selection multiple sur une jtable et deselectionbase de données SQL
[SQL] Problème de modélisation (pas d'autre idée de titre dsl)Sélection d'un collage via un filtre automatique
Plus de sujets relatifs à : [Resolu]Selection SQL pour QReport


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR