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 :

filtre dbgrid avec sql


Sujet :

Bases de données Delphi

  1. #21
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonjour
    Mon problème c'est que je veux filtrer un dbgrid à l'aide d'un combobox sur 2 colonnes [situation] et [année]. je n'arrive pas, mais sur une seule colonne cela marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table1 WHERE année='+QuotedStr(combobox3.Text)+ 'and situation ='+QuotedStr(edit3.Text);
    ADOQuery1.Active := true ;
    form1.Edit1.Text := IntToStr(ADOQuery1.RecordCount);
    merci pour votre aide

  2. #22
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    en plus des avantages sus-cités par Phillipe , je rajouterais qu'avec une requête paramétrée on ne se souciera plus du format de la date (dans le cas de son dernier SQL)
    Citation Envoyé par kasrimus Voir le message
    Bonjour
    Mon problème c'est que je veux filtrer un dbgrid à l'aide d'un combobox sur 2 colonnes [situation] et [année]. je n'arrive pas, mais sur une seule colonne cela marche.
    Comme dit plus haut, le passage de paramètre est la meilleure solution, surtout que tu gères une date et que selon les bases de données il faut un format spécifique (Ex: Access : MM/DD/YYYY, MYSQL : YYYY-MM-DD, etc ...)

    Après Année est il un champ numérique ou alphanumérique ?
    Si numérique alors faut enlever le Quoted
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #23
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonjour,
    j'ai toujours le même problème. je filtre sur un seul champ cela fonctionne, mais sur 02 champs cela coince, j'utilise BD access 2007.
    champs : situation et année. voilà, mes amis, et je remercie l’ensemble des intervenants.

    code:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table1 WHERE année='+QuotedStr(combobox3.Text)+ 'and situation ='+QuotedStr(edit3.Text);
    ADOQuery1.Active := true ;
    form1.Edit1.Text := IntToStr(ADOQuery1.RecordCount);

  4. #24
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    bonjour,
    merci pour votre réponse
    comment enlever le quoted svp, un exemple svp
    je filtre sur 2 champs sitution et année.
    merci d'avance pour votre aide.

  5. #25
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par kasrimus Voir le message
    bonjour,
    merci pour votre réponse
    comment enlever le quoted svp, un exemple svp
    je filtre sur 2 champs sitution et année.
    merci d'avance pour votre aide.
    Désoler c'est le QuotedStr

    Enfin il nous manque une grosse information.

    Quelles sont les types de champs de la base de données ?
    Année = Integer ? String ? DateTime ?
    Situation = idem ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #26
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonsoir,
    merci pour votre réponse, en fait les champs sont de types String, Integer et datetime. base access 2007
    merci encore

  7. #27
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    on est content de savoir qu'il y a des
    les champs sont de types String, Integer et datetime
    mais cela nous dit pas quel est le type du Champ année et du champ situation
    (ceux de la clause WHERE)

    donc , je répète (résume) les solutions proposées par Ph.B. et Buzz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table1 WHERE année=:A and situation =:S';
    ADOQUERY1.Parameters.ParamByName('A').Value:=combobox3.Text;
    ADOQUERY1.Parameters.ParamByName('S').Value:=edit3.Text;
    ADOQuery1.Active:=True;
    Vérifiez le type des champs Année et Situation et typez les paramètres en conséquence sera un + (voir post de Buzz) . Transformez si besoin les valeurs des zones de saisie .

    par exemple : Annee devrait être un Entier donc je mettrais le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOQUERY1.Parameters.ParamByName('A').DataType  :=ftInteger;
    ADOQUERY1.Parameters.ParamByName('A').Value:=StrtointDef(combobox3.Text,0);
    c'est un peu plus compliqué ? je vous l'accorde , mais c'est certainement plus 'carré'

    pour ce qui est de votre Query non paramétrée c'est qu'il manque tout simplement un espace devant le and , chose que vous auriez évité avec une requête paramétrée .

    Prenez de bonnes habitudes.

    PS. je suis étonné de voir une discussion de ce genre prendre 4 * sans aucun mais encore plus de voir que la solution a été proposée des le début et que 2 semaines plus tard on nous re-serve le même code
    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

  8. #28
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonsoir
    merci pour votre réponse, cela ne marche pas toujours,
    merci pour le tout

  9. #29
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    PS. je suis étonné de voir une discussion de ce genre prendre 4 * sans aucun mais encore plus de voir que la solution a été proposée des le début et que 2 semaines plus tard on nous re-serve le même code
    La cela mérite un , d'ailleurs j'avais pas réondu desuite pour qu'on moins il relise les solutions...

  10. #30
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonsoir,
    je remercie toute les personnes qui ont tout fait pour m'aider, je ne maitrise pas beaucoup ado et mois les requêtes sql.
    j'ai toujours le même problème.
    c'est vrai que cela mérite
    la question reste ouverte.

  11. #31
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Quand nous fournirez vous (enfin) le code que vous essayez et ce que nous demandons depuis le début : les types de champs de année et situation ?


    cela ne marche pas toujours,
    ne veut pas dire que cela ne fonctionne (marche) pas .
    Donc : un peu de rigueur !

    Répondez aux questions suivantes

    1-Dans la table nommée table1 , Année est de type ?
    2-Dans la table nommée table1 , Situation est de type ?

    3-Le code ?

    4-le résultat ou le message d'erreur ?

    5-le jeu d'essai ?

    6-Ce qui devrait être obtenu ?
    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

  12. #32
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonjour
    merci pour votre réponse,

    1-Dans la table nommée table1 , Année est de type Integer
    2-Dans la table nommée table1 , Situation est de type String

    3-Le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table1 WHERE année='+QuotedStr(combobox3.Text)+ 'and situation ='+QuotedStr(edit3.Text);
    ADOQuery1.Active := true ;
    4-le résultat ou le message d'erreur ? Aucun message d'erreur

    5-le jeu d'essai ? je ne comprend pas c'est quoi le jeu d'essai

    6-Ce qui devrait être obtenu ? filtrer un dbgrid sur de champs:
    Champ [situation] : soit AP ou AD
    Champ [Année] : 2008, 2009, 2010, 2011 et 2012

    dans les Items du combobox3 sont : AP et AD - 2008, 2009, 2010, 2011 et 2012.

    Merci pour l'aide.
    c'est gentil.

  13. #33
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Voilà quelquechose de plus précis...

    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
    With ADOQuery1 do
    begin
      Sql.Clear;
      Sql.Add('SELECT * FROM table1 ');
      Sql.Add('Where Année= :xAnnée ');
      Sql.Add('And Situation= :xSituation ');
      Parameters.ParamByName('xAnnée').DataType := ftInteger;
      Parameters.ParamByName('xSituation').DataType := ftString;
      Parameters.ParamByName('xAnnée').Value := StrToIntDef(ComboBox3.text,'2008');
    // Possible aussi pour Combobox3
    // if ComboBox.itemIndex <> - 1 
    // then Parameters.ParamByName('xAnnée').Value := StrToInt(ComboBox3.Strings[ComboBox3.itemIndex])
    // else Parameters.ParamByName('xAnnée').Value := 2008;
      Parameters.ParamByName('xSituation').Value := Edit3.text;
     
      Try
       Open;
       // ... ici fait ton traitement
     
      Finally
       Close;
      end;
     
    end;

  14. #34
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Nous nous évertuons a vous donner une solution avec des paramètres que vous n'utilisez pas

    Correction de votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table1 WHERE année='+combobox3.Text+ ' and situation ='+QuotedStr(edit3.Text);
    ADOQuery1.Active := true ;

    de plus dans les messages d'hier
    - Rayek vous a indiquer de supprimer QuotedStr pour la partie année
    - je vous ai indiqué qu'il manquait un espace devant le 'and situation'

    et je pense également vous avoir donné en code la solution en utilisant des paramètres , un simple copié/collé est-il trop demander ?

    PS. pour info , un jeu d'essai un ensemble de données test (soit une partie du contenu de la table1)
    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

  15. #35
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonsoir
    je vous remercie pour l’intérêt particulier que vous accorder à mon problème.
    si on vous sollicite c'est pour que nous puissions améliorer nos connaissances.
    et je dirais que le rôle vous jouer, seul dieu pourras vous récompenser.
    personnellement avec de l'argent je n'ai pas pu régler mon problème et cela fait plus de 25 jours que je galère.
    donc merci encore.
    s'agissant du code il m'affiche une erreur au niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parameters.ParamByName('xAnnée').Value := StrToIntDef (form1.ComboBox7.Text);//,'2008');
    pour votre information j'utilise adoquery avec delphi
    Merci encore et bon courage.

  16. #36
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par kasrimus Voir le message
    si on vous sollicite c'est pour que nous puissions améliorer nos connaissances.
    Je vais jouer les grincheux ,mais je n'ai pas l'impression après avoir parcouru l'ensemble de la discussion que vous avez pris en compte les remarques ou les solutions que l'on vous a fournies...
    Citation Envoyé par kasrimus Voir le message
    s'agissant du code il m'affiche une erreur au niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parameters.ParamByName('xAnnée').Value := StrToIntDef (form1.ComboBox7.Text);//,'2008');
    1. Vous n'avez pas donné le libellé de l'erreur
    2. En regardant le code, je peux déjà dire que j'écrirais
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Parameters.ParamByName('xAnnée').Value := StrToIntDef(form1.ComboBox7.Text, 2008);
      ou encore
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Parameters.ParamByName('xAnnée').Value := StrToInt(form1.ComboBox7.Text);

    Mais je ne suis pas sur vu les hypothèses partielles, que cela résolve votre problème...
    Philippe.

  17. #37
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonjours mes amis.
    Enfin j'ai pu régler mon problème et cela grâce à vous mes amis. c'est vraiment très gentil, et je m'excuse pour la lenteur dans la compréhension. En fait je suis beaucoup plus access que delphi. merci encore
    une autre question si c'est possible, comment peut extraire uniquement l'année d'un champ date svp.
    en acces [VBA] code est:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub DateDépôt_Exit(Cancel As Integer)
    Dim myAnnée As Variant 'déclaration de la variable
    myAnnée = DatePart("yyyy", [DateDépôt]) 'extrait l'année de la date courante.
    Me.[Texte3] = Me.[Texte3] & " /" & myAnnée
    Me.Année = myAnnée
    End Sub

    merci encore.

  18. #38
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Utilise la function YearOf de l'unité DateUtils.

    Créé un autre topic se serait mieux.

  19. #39
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Filtre dbgrid avec sql
    Bonsoir
    merci pour la réponse, svp un exemple si ce n'est trop demandé
    merci encore

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Filtre glissant en SQL avec la fonction decode
    Par jerem7w dans le forum SQL
    Réponses: 4
    Dernier message: 09/01/2012, 12h06
  2. DBgrid avec champs de recherche et filtre
    Par thered dans le forum Composants VCL
    Réponses: 9
    Dernier message: 20/06/2009, 03h19
  3. Réponses: 4
    Dernier message: 26/02/2008, 09h55
  4. Alimenter DBgrid avec requete SQL ?
    Par La_Bande_A_Zozo dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/05/2006, 17h51
  5. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02

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