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 :

requête sql pour recherche par mois


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut requête sql pour recherche par mois
    j'ai essaie de faire une recherche pour afficher mes enregistrement
    par mois c.a.d si j'entre mai mon dbgrid affiche seulement les
    enregistrement concernée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if MaskEdit1.Text <> '' then
    begin
    form6.DBGrid1.Visible:=true;
    Query1.Active:=False;
    Query1.Params[0].AsDate := strtodate(MaskEdit1.Text);
    Query1.Active:=True;
    end;
    la requette est la suivante:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Codloc,NomPrenom,Naissance,Residance from membrec
    Where Durerloyer(month) =:variableDate

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    D'abord parlons de l'ordre, le code SQL c'est à dire la requête, le paramétrage puis l'exécution se qui donnera approximativement cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select Codloc,NomPrenom,Naissance,Residance from membrec
    Where Durerloyer(month) =:variableDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if MaskEdit1.Text <> '' then
    begin
    form6.DBGrid1.Visible:=true;
    Query1.Active:=False;
    Query1.Params[0].AsDate := strtodate(MaskEdit1.Text);
    Query1.Active:=True;
    end;
    Ensuite, je constate que ton but est de filtrer le mois par contre ton MaskEdit contient une date ce qui fait une grande différence. Donc, faudrait utiliser DecodeDate pour ne retenir que le mois et le passer en paramètre.

    Bon courage.

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    voici un petit joujou répondant à ton souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    procedure TForm1.bFiltreClick(Sender: TObject);
    var
      chaine_sql : string;          // pour stocker la chaine SQL
      jj, mm, aa : word;            // variables servant aux stockages de l'année, le mois et le jour
      d_debut, d_fin : TDate;       // date début et date fin
      taTable, tonChamp : string;   // Table et champ invoqués
    begin
      // ici le nom de la table
      taTable := 'employee';
     
      // ici le champ de type date
      tonChamp := 'HireDate';
     
      // la chaine SQL
      chaine_sql := 'SELECT * '
                  + 'FROM ' + taTable + ' '
                  + 'WHERE  ' + tonChamp + '>=:vAnneeDebut AND ' + tonChamp + ' <=:vAnneeFin';
      // fermer le query
      query1.Close;
     
      // effacer l'ancien contenu
      query1.SQL.Clear;
     
      // affecter la chaine SQL
      query1.SQL.Text := chaine_sql;
     
      // décoder la date pour obtenir l'année
      DecodeDate(DateTimePicker1.Date, aa, mm, jj);
     
      // construire la date début
      d_debut := EncodeDate(aa, 01, 01);
     
      // construire la date fin
      d_fin := EncodeDate(aa, 12, 31);
     
      // affeter aux deux paramètres comme indiquer dans la chaine SQL
      query1.ParamByName('vAnneeDebut').AsDate := d_debut;
      query1.ParamByName('vAnneeFin').AsDate := d_fin;
     
      // ouvrir la table
      query1.Open;
     
      // affichage du résultat et fin...........
      ShowMessage(Format('%d enregistrement(s) trouvé(s)', [query1.RecordCount]));
    end;
    Bon codage.

  4. #4
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut requtte SQL à la recherche par mois
    ça na pas marcher car je veut quand j'entre un mois dans un edit1.text
    je doit appercevoire dans ma dbgrid seulement les enregistrement de ce mois

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    Un peu d'effort. J'avais oublié de signaler que j'ai travaillé avec un DateTimePicker. Bref c'est du pareil au même en tout cas puisque tu travaille avec un MaskEdit.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 191
    Points : 41 408
    Points
    41 408
    Billets dans le blog
    63
    Par défaut
    Si au moins on savait avec quelle BDD . La plupart ont des fonctions permettant d'extraire le mois d'une date .

    Les détails , les détails .....

    et qu'est-ce que 'Durerloyer(month)' ?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 62
    Points : 52
    Points
    52
    Par défaut
    Bonjours mahboubi, je pense avoire la solution a ton prob...
    Voici le code:

    pour le filtre par mois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from Tatatable');
    Query1.SQL.Add ('where extract(month from Ton champ)= '''+MaskEdit2.text+'''');
    Query1.Open;
    pour le filtre par année:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from Tatable');
    Query1.SQL.Add ('where extract(year from Ton champ)= '''+MaskEdit1.text+'''');
    Query1.Open;
    et enfin par jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from Tatable');
    Query1.SQL.Add ('where extract(day from Ton champ)= '''+MaskEdit3.text+'''');
    Query1.Open;
    Ps: vus que tu n'as pas mentioné le type de bd que tu utilises, j'ai jujé que c'été en BDE.... j'esper t'avoire aider

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Justement SergioMaster ce que j'ai proposé va au delà du SGBD utilisé, pas la peine de savoir quel SGBD il utilise !

  9. #9
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut toujour le meme pb
    salut ts le monde merci pour l'aide
    mois j'utilise PARADOX et la solution de lou delphdev n'a pas marcher il m'affiche type mismatch

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 191
    Points : 41 408
    Points
    41 408
    Billets dans le blog
    63
    Par défaut
    On y arrive
    Paradox donc extract devrait fonctionner maintenant le mois étant un entier il faudrait peut-être comprarer un entier avec un entier et non un chaine de caractère . Mieux encore utiliser les pramètres pour une query

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from Tatable');
    Query1.SQL.Add ('where extract(month from champDate)=:MM') 
    Query1.ParambyName('MM').asInteger:=MaskEdit2.text;
    Query1.Open;
    PS. Ceci en espérant que Champdate est bien un champ déclaré Date et pas une String et que la validation du MaskEdit2.text ai bien été faite (valeur entière comprise entre 1 et 12) n.b. cela aurait été plus aisé avec un TspinEdit .

    à la paresseuse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query1.SQL.Add ('where extract(month from champDate)='+maskedit2.text)
    devrait fonctionner , mais c'est une mauvaise habitude

Discussions similaires

  1. [MySQL] Requête Sql pour avoir les mois coulant
    Par nitro97130 dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 03/12/2012, 05h06
  2. [MySQL] Requête SQL pour recherche multicritères
    Par bili31 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/08/2011, 10h16
  3. Requête SQL pour un moteur de recherche
    Par CrazyCow007 dans le forum Débuter
    Réponses: 3
    Dernier message: 23/06/2010, 13h09
  4. Problème requête sql pour une recherche
    Par Zoldik dans le forum Langage SQL
    Réponses: 21
    Dernier message: 03/03/2009, 14h01
  5. créer une requête pour regrouper par mois
    Par kuhnden dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 26/01/2008, 13h41

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