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 :

Recherche base de données tquery, filtre


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Recherche base de données tquery, filtre
    Bonjour, j'ai une base de données paradox7 et je voudrais savoir quels sont les étapes pour faire une recherche a l'aide d'un edit , j'ai vu pas mal de discussion mais j'ai pas bien compris comment faire
    merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 288
    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 288
    Points : 41 738
    Points
    41 738
    Billets dans le blog
    65
    Par défaut
    La question est loin d'être claire
    je pense que tu veux dire que tu veux faire une recherche dans une table paradox sur un colonne particulière dont la valeur serait fournie par un Edit

    il y a au moins 5 possibilités et j'en oublie peut être
    1) si cette colonne est une clé de la table et ne fournit qu'un seul enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Table1.FindKey([Edit1.text]) 
       then // trouvé
       else // non trouvé
    ou encore FindNearest
    Citation Envoyé par Aide Delphi
    Pour les tables Paradox ou dBASE, la clé doit toujours être un index, qui peut être spécifié dans la propriété IndexName, et si IndexName est vide, dans l'index primaire de la table.
    2) sinon mais toujours un singleton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Table1.Locate('COLONNE',vararrayof([Edit1.text]),[])  // voir syntaxe exacte 
      then // trouvé
      else // non trouvé
    ou encore Lookup


    Si on peut obtenir plusieurs enregistrements
    3) le filtre sur les propriétés de la table (a mon avis la plus mauvaise solution surtout lorsqu'il s'agit de date )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table1.Filter:='COLONNE = '+QuotedStr(Edit1.text);
    table1.Filtered:=True;
    table1.Refresh;
    Citation Envoyé par Aide Delphi
    Un composant table référence toujours une seule table de base de données. Si vous devez accéder à plusieurs tables depuis un seul composant, ou si vous êtes seulement intéressé par un sous-ensemble de lignes et de colonnes d'une ou de plusieurs tables, il est préférable d'utiliser un composant requête.
    4) le 'Filtre' programmable si la colonne est une clé
    Avec les tables Paradox ou dBASE, SetRange ne fonctionne que sur les champs indexés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.SetRange([edit1.text],[edit1.text]);
    5) et enfin la Query paramètrable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Query1.SQL.Text:='SELECT * FROM MATABLE WHERE COLONNE=:C';
    Query1.ParamByName('C').asString:=Edit1.Text;
    Query1.Active:=True;
    ....
    if Query1.FieldByName('COLONNE').isNull then // non trouvé
                                                                     else
    ...
    Query1.Active:=False;
    NOTE : Toujours préférer une Query paramètrable a une codée "en dur"
    j'aurais pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query1.SQL.Text:='SELECT * FROM MATABLE WHERE COLONNE='+QuotedStr(Edit1.Text);
    et me passer de paramètre inconvénient ? esssayez avec un Float ou une date

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    merci pour votre réponse je voudrais tenté le query, alors je doit mettre un query plus datasource et un dbgrid, c bien ca???

    ma recherche consiste a trouve un ou plusieurs enregistrements dans une table le édit doit porter une condition, par exemple je veut chercher les étudiants d'une filière x que j'écrirais dans le édit, et le résultat sera une liste des étudiants qui étudie dans cette filière.

  4. #4
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Alors ça sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DataSource1.DataSet := myQuery;
    DBGrid1.DataSource := DataSource1;
     
     
    with myQuery do begin
      DatabaseName := 'Chemin de la base';
      SQL.Text := 'SELECT * FROM TABLE WHERE FILIERE=:FILIERE';
      ParamByName('FILIERE').AsString := edit1.Text;
      Open;
    end;
     
    //N.B : Si ton champs 'FILIERE' est numérique, il faudra mettre :
      ParamByName('FILIERE').AsString := StrToInt(edit1.Text);

    Evidemment, ton query doit être rattaché à un DataSource qui, lui, doit être rattaché à une DBGrid comme précisé en haut.

    Bon Dév.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    j'arrive pas a avoir le résultat ,je crois que je m'embrouille avec les champs, un message s'affiche quand je clic sur le bouton de recherche 'nom du champs incorrect'

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    ma table se compose de :
    num-fil (numéro de filière)
    type-fil (type de filière)
    type-form (type de formation)


    ma requête c'est d'écrire dans l'édit le type de formation pour avoir tout les filière du même type
    merci .

  7. #7
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Je ne suis pas sûr, mais je crois que le pbm vient des noms des champs.
    Au lieu de num-fil, mets plutôt Num_Fil.
    Evites le tiret de la touche 6 qui est pris comme le signe moins (-). Il vaut mieux utiliser le souligné (touche 8) pour séparer les parties d'un champs.

    Essaies de faire ces modifs sinon envoies-moi ta procédure.

    NB: Il faut lire un peu sur le SQL pour comprendre son utilisation. Il y a plein de tutos.

    Bon dév.

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Je vous remercie énormément , j'ai changé le tiré et ca fonctionne ..encore merci

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    La question est loin d'être claire
    je pense que tu veux dire que tu veux faire une recherche dans une table paradox sur un colonne particulière dont la valeur serait fournie par un Edit

    il y a au moins 5 possibilités et j'en oublie peut être
    1) si cette colonne est une clé de la table et ne fournit qu'un seul enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Table1.FindKey([Edit1.text]) 
       then // trouvé
       else // non trouvé
    ou encore FindNearest


    2) sinon mais toujours un singleton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Table1.Locate('COLONNE',vararrayof([Edit1.text]),[])  // voir syntaxe exacte 
      then // trouvé
      else // non trouvé
    ou encore Lookup


    Si on peut obtenir plusieurs enregistrements
    3) le filtre sur les propriétés de la table (a mon avis la plus mauvaise solution surtout lorsqu'il s'agit de date )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table1.Filter:='COLONNE = '+QuotedStr(Edit1.text);
    table1.Filtered:=True;
    table1.Refresh;


    4) le 'Filtre' programmable si la colonne est une clé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.SetRange([edit1.text],[edit1.text]);
    5) et enfin la Query paramètrable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Query1.SQL.Text:='SELECT * FROM MATABLE WHERE COLONNE=:C';
    Query1.ParamByName('C').asString:=Edit1.Text;
    Query1.Active:=True;
    ....
    if Query1.FieldByName('COLONNE').isNull then // non trouvé
                                                                     else
    ...
    Query1.Active:=False;
    NOTE : Toujours préférer une Query paramètrable a une codée "en dur"
    j'aurais pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query1.SQL.Text:='SELECT * FROM MATABLE WHERE COLONNE='+QuotedStr(Edit1.Text);
    et me passer de paramètre inconvénient ? esssayez avec un Float ou une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Si on peut obtenir plusieurs enregistrements
    3) le filtre sur les propriétés de la table (a mon avis la plus mauvaise solution surtout lorsqu'il s'agit de date )
    lorsqu'il s'agit de date simplemment tu index la colum Date et metre DataType (de la colum date):=ftDate tu ajout se code a la fin est le problem est resulut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.IndexName:='withdate';
    donc le code va etre comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    table1.Filter:='Name = '+QuotedStr(Edit1.text);
    table1.Filtered:=True;
    table1.Refresh;
    table1.IndexName:='withdate';
    apré l'execution de filtrage il execut l'indexage par date

    testé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/10/2013, 16h09
  2. Base de données TQuery filtre
    Par antoinelac dans le forum C++Builder
    Réponses: 8
    Dernier message: 20/01/2009, 18h47
  3. base de données avec filtre automatique
    Par DIAD1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/05/2008, 14h58
  4. Recherche base de données sous Delphi
    Par clipper5.3 dans le forum Bases de données
    Réponses: 26
    Dernier message: 20/04/2008, 00h57
  5. Recherche base de données Charset
    Par anihat dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/10/2007, 19h11

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