IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Aide pour une sélection SQL


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut Aide pour une sélection SQL
    J’ai un tableau de détail de vente. Est-ce qu'il est possible de limiter la sélection d'une query de sélection par une limite de poids dans mon tableau comme suit :

    Nom : Sans titre.png
Affichages : 454
Taille : 47,3 Ko


    Les produits de 1 à 7 dans une liste sélection de 203 kg
    Les produits de 8 à 12 dans une sélection de 203 kg
    Ainsi de suite...

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je vais dire une connerie mais ...

    select * from matable where poids > poidsvoulu

    mais ça me parait bien trop simple

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    bonjouj
    Papy214 merci de votre idée mais la sélection que je voulais n'est pas celle-là puisque j'ai essayé ce code mais ça ne donne pas le résultat voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select
    sum(poid_livr)as tot_poid_livr;
    group by ref_aff_v
    Ce code me donne le total de poids. Le résultat que je voulais : que la liste divise sur un poids que l'utilisateur se donne.

  4. #4
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Papy214 parlait de clause where pas du group by.
    C'est difficile de comprendre quelque chose dans ce qui est écrit x)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    retwas
    aaa j'ai rien compris

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    il faudrait peut être prendre des cours de SQL et par la même occasion quelques cours de Français que l'on puisse comprendre un peu mieux la question.

    selon votre demande, vous voulez séparer les poids de livraison >= à 203 kg des autres (< 203)
    cela demande donc deux query distinctes et papy avait raison pour la première (à ceci près qu'il y manque un =)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM LATABLE WHERE poid_livr>=203
    et l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM LATABLE WHERE poid_livr<203
    si c'est l'utilisateur qui doit définir le poids (203) alors il suffit de remplacer ce nombre par un paramètre
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    bonjour
    vous avez raison SergioMaster,Il est de ma faute parce que je n'ai pas expliqué bien ma question,Je veux diviser cette liste à un total de '20ton' listes de poids, ou le poids déterminé par l'utilisateur, en tenant compte de l'ordre de la liste
    une autre question:
    Puis-je mettre du poids comme une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM det_aff_v
    WHERE sum(poid_livr)=20
    et Je vous remercie beaucoup pour l'aide

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ce n'est pas du tout pareil
    déjà votre SQL est faux un sum, fonction de groupage, nécessite un group by .
    Vous n'indiquez pas votre SGBD et je craint que ce soit Paradox auquel cas pas de CTE, pas de Requête Recursives, pas de Procedures la solution ne passera donc pas par SQL seul via le SGBD mais par le programme.

    AMHA et schématiquement
    il faut un SELECT * FROM LATABLE et filtrer cette requête TQuery.Filtered:=TrueEnsuite gérer l'évènement onFilterRecord de telle manière que le cumul des poids se fasse à ce moment là.

    En variable globale poidsatteint
    à l'ouverture de la requête dans le OnfilterRecord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       poidsatteint:=PoidsAtteint+Query.FieldByName('poids_total').asfloat;
       Accept:=PoidsAtteint<=ValeurdemandéeparlUtilisateur
    cependant il se peut que le poids ne soit jamais atteint à 100% ,
    exemple si l'utilisateur demande 660kg, juste avec ce code on s'arrête au 2 premier Nn soit 610kg
    en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if not Accept then poidsatteint:=PoidsAtteint-Query.FieldByName('poids_total').asfloat; // enlève le poids
    cette technique proposera de prendre
    les 9045001,9045002,9045005,9045007 soit 305+305+13+26
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour

    @ABK
    Laisse moi te proposer ma méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Ref_prod , Designation, SUM(poid_a_livr) as TotalPoids 
    FROM MATABLE
     
    GROUP BY  Ref_prod , Designation
    HAVING    SUM( poid_a_livr)>=:Q
    ORDER BY  TotalPoids DESC
    -donne une définition à Q par Params de Query1.

    -relie ta requête à un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Query1.close;
      Query1.Params[0].AsFloat:=StrToFloat(Edit1.Text)   ;
      Query1.Open;
    end;

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    Bonne journée à tous
    Je suis venu avec l'idée de moi, je l'ai utilisé le code suivant dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ref_prod,nn,reper,designation,empl,qte_a_alivr,poid_a_livr
    from detaille_aff_v
    where (empl>=:debut) and (empl<=:fin)
    HAVING ref_aff_v=:Q
    J'ai ajouté un champ à la table nommée "empl(emplacement)"
    Et mettre un bouton et introduit le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    datas.Query2.close;
    datas.Query2.Params[0].AsString:=Edit1.Text;
    datas.Query2.Params[1].AsString:=Edit2.Text;
    datas.Query2.Params[2].Asfloat:=StrToFloat(Edit3.Text);
    datas.Query2.active:=open;
    fiche_liste_livr.ShowModal;
    Mais le problème
    les Produits, qui possède le emplacement entre 3 et 9 ne semble pas

  11. #11
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    @ABK
    Désolé, je ne peux pas comprendre ton problème.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    FOCUS77
    Pour comprendre
    Les produits qui portent l'emplacement n ° 3 à n ° 9 ne figure pas dans la liste, et je vais vous expliquer l'image
    Nom : Sans titr1e.png
Affichages : 472
Taille : 307,7 KoNom : Sans titr1e1.png
Affichages : 484
Taille : 316,0 Ko

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par abkthekingABK Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ref_prod,nn,reper,designation,empl,qte_a_alivr,poid_a_livr
    from detaille_aff_v
    where (empl>=:debut) and (empl<=:fin)
    HAVING ref_aff_v=:Q
    Encore un SQL incorrect ! HAVING doit aller de paire avec un GROUP BY et un GROUP BY avec un Aggregat (SUM,MAX,MIN etc...)
    on ne comprend pas ce que vient faire , et à quoi correspond ref_aff_v avec la question de poids

    Au lieu de nous fournir des images écrans, fournissez plutôt la structure des tables de données, le jeu d'essai et le résultat souhaité
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 28
    Points : 0
    Points
    0
    Par défaut
    Je l'ai fait quelques modifications au code de requête est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sélectionnez ref_aff_v, ref_prod, nn, REPER, désignation, empl, qte_a_alivr, poid_a_livr
    de detaille_aff_v
    où (ref_aff_v =: q) et (empl> =: débuts) et (empl <=: fin)
    Je reçois un message d'erreur disant
    Incompatibilité de type dans l'expression.

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Ce que vous nous indiquez n'est pas du SQL, vous vous êtes certainement fait aider par ailleurs sans faire l'effort de nous proposer un code correct ! Et je ne parle même pas du caractère 'é'
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ref_aff_v, ref_prod, nn, REPER, désignation, empl, qte_a_alivr, poid_a_livr
    FROM detaille_aff_v
    WHERE (ref_aff_v =: q) AND (empl >=: débuts) AND (empl <=: fin)

    Citation Envoyé par SergioMaster
    fournissez plutôt le SGBD, la structure des tables de données, le jeu d'essai et le résultat souhaité
    avec ce que vous nous avez donné comme texte de SQL on ne peut pas trouver l'erreur , à quoi correspond reff_aff_v à quoi correspond le paramètre q ?

    et de toute façon cela ne correspond pas à votre demande initiale.

    pour reprendre vos images : quelle est la requête qui rempli la grille de la forme fiche_detaille_vente
    c'est à partir de ce SQL que vous ferez le reste, s'il s'agit toujours d'extraire une partie de l'ensemble affiché pour obtenir une sélection en fonction d'un poids désiré
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. besoin d'aide pl/SQL
    Par toome dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/12/2005, 15h26
  2. [SQL] récupérer sélection dans liste déroulante
    Par nerick dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/12/2005, 11h30
  3. Besoin d'aide requete sql
    Par dinde dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/10/2005, 09h09
  4. [Aide requete SQL]
    Par viny dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/04/2005, 17h00
  5. aide PL/SQL syntaxes [debutant] [mauvaise doc]
    Par sdeb dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/01/2004, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo