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 :

créer un filtre avec Delphi sur une BD oracle


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut créer un filtre avec Delphi sur une BD oracle
    Bonjour,

    bon voilà, j'ai une BD oracle, et je voudrais faire un prg avec delphi qui va me permettre de faire une consultation sur une table (clients) en activant un filtre sur la table désque je commence à taper le nom (par ordre alphabetique)

    ce que j'ai pu faire :
    1. la connexion à la BD
    2. affichage de la table sur un DBGRID (tous les enregistrements)

    ce que je n'ai pas pu faire :
    désque je commence à taper sur le champ de recherche , rien ne se passe , et si je tape sur la touche ENTREE , l'affichage disparait et je ne peux plus avoir le contrenu de la table , jusqu'à ce que je quitte la fenetre (CTRL+ALT+SUPP)
    je suis un débutant avec DELPHI
    j'ai pu faire ce que j'ai envie de faire avec une table en DBF (dbase).

    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut

    tu as un problème au niveau du code donc vaut mieux le coller comme ça chacun pourra contribuer en améliorant ton code le cas échéant le laisser de coté.

    pour ce type de recherche tu peux utiliser la fonction FINDNEAREST mais qui, si je me rappel bien, à besoin d'un champ indexé comme argument.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    re,

    j'ai pas le code avec moi pour le moment, mais je crois que le problème réside au niveau de l'index.
    la question est comment intégrer l'index ? à partir de l'inspecteur d'objet ? ou bien à partir du code ?
    un autre détail : la connexion à la BD s'est effectuée avec ADO

    merci

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    tu peux faire ça en SQL dans l'évènement en OnKeyPressed de ton Edit, à chaque frappe de touche le code s'exécute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Query1.Clear;
    Query1.SQL := 'Select * From taTable';
    Query1.SQL := Query1.SQL + ' Where tonChamp =: var' + '%';
    Query1.ParamByName('var') := Edit1.Text; 
    Query1.ExecSQL
    à toi de tester.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    salut ,

    bon voilà , je vais coller mon code et àvous de me le corriger !
    c pas vraiment fameux mais il faut un début à tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adotable1.Filtered := False ;
    adoTable1.Filter:= 'Nom ='+QuotedStr(Edit1.Text);
    adoTable1.Filtered := True;
    ciao

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Citation Envoyé par halimelio Voir le message
    salut ,

    bon voilà , je vais coller mon code et àvous de me le corriger !
    c pas vraiment fameux mais il faut un début à tout

    adotable1.Filtered := False ;
    adoTable1.Filter:= 'Nom ='+QuotedStr(Edit1.Text);
    adoTable1.Filtered := True;


    ciao
    s'il donne le résultat escompté c'est qu'il est bon.

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    salut ,

    c'est le code que j'ai écrit mais il ne fonctionne pas..
    quand j'execute le programme , j'ai l'affichage de l'ensemble des enregsitremenst de la table (oracle) sur le DBGRID normalement mais désque je commence à taper sur le EDIT1 l'affichage des enregistremenst disparait m^me s'il existe des enregistrements qui - normalement - sonty touchés par le filtre.

    merci
    ciao

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adotable1.Filtered := False ;
    adoTable1.Filter:= 'Nom =%'+QuotedStr(Edit1.Text)+'%';
    adoTable1.Filtered := True;
    si je me souviens bien

  9. #9
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Dans quel évènement as-tu mis le code ? tu l'as associé à quel composant ?

  10. #10
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    salut ,

    je l'ai associé à EDIT1change
    merci

  11. #11
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Re;

    donc ce qui se passe est tout à fait normal. Le Onchange n'a pas besoin d'une validation par entrée, ce qui veut dire que dès que tu commences à taper les lettres le filtre se met à rechercher les enregistrements correspondants.

    Examinons le déroulement de plus près pour bien comprendre le phénomène, prenons l'exemple avec le nom "essai" tout en supposant que "essai" est bien présent dans la base de données au moins un fois.

    voici l'opération :
    1. écriture de "e" --> aucun résultat et dbgrid vide;
    2. écriture de "s" --> aucun résultat et dbgrid vide;
    3. écriture de "s" --> aucun résultat et dbgrid vide;
    4. écriture de "a" --> aucun résultat et dbgrid vide;
    5. écriture de "i" --> dbgrid affichant le nombre d'enregistrements répondant au filtre.


    à l'instar de cette explication si ton dbgrid se vide au cours de la recherche s'est ou à faut normal, et s'il reste vide même après avoir fini d'entrer le mot recherché donc tu es devant l'un des deux cas suivant:

    • ce mot n'est pas dans la base de données;
    • sinon tu as un problème de respect de casse dû à des restrictions de ton SGBD.

  12. #12
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    salut ,

    je crois que je ne me suis pas bien expliqué, actuellement lorsque j'execute mon programme, j'ai le DBGRID qui contient tous les enregistrements (toute la table est affichée) , l'objectif de mon application est dés qu'on commence à taper sur le composant EDIT , le filtre va s'activer et le traitement commence, donc seulement les enregistremenst qui répondent aux criteres qui resteront.
    le problème que j'ai : lorsque je tape les lettres tous les enregistrements disparaissent , même ceux qui contiennent les lettres tapées.
    pour vous aider un peu, j'ai fais le même programme avec une table en DBASE , ça a trés bien marché !! je n'arrive pas à situer le problème.

    vraiment je suis désolé, mais je voudrais avoir de l'aide , ça va beaucoup m'aider.
    mes remerciements anticipés.

    ciao

  13. #13
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    oui tu as mal exposé le problème. La solution, la plus simple à mon avis consiste à utiliser la méthode FINDNEAREST, mais le champs sur lequel repose la recherche doit être indexé. Fais appel à cette méthode dans le OnChange de ton Edit. Tu trouveras davantage d'explications dans l'aide de Delphi.

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Par défaut créer un filtre avec delphi sur une DB oracle
    Salut, il faut associer ce code à l’événement on change de ton Edit1.txt pour qu'a chaque fois que votre tapez une lettre un nouveau filtre ce déclenche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adotable1.Filtered := False ;
    adoTable1.Filter:= 'Nom =%'+QuotedStr(Edit1.Text)+'%';
    adoTable1.Filtered := True;
    bon courage

Discussions similaires

  1. Réponses: 20
    Dernier message: 23/11/2013, 18h53
  2. Problème de date avec Coldfusion sur une base Oracle
    Par HappyTreeFred dans le forum Coldfusion
    Réponses: 7
    Dernier message: 13/02/2009, 08h33
  3. Réponses: 2
    Dernier message: 15/10/2008, 15h49
  4. Réponses: 20
    Dernier message: 23/06/2006, 20h49
  5. Application de filtre de couleur sur une page web
    Par kalan dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 21/06/2006, 18h44

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