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

C++Builder Discussion :

Fonction pour rechercher dans une table [Langage/Algorithme]


Sujet :

C++Builder

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Pardon, dans une base de donnée Paradox, dans outils>module base de données ( j'ai fait ça en lisant un tutoriel sur ce site )

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Bon, en // j'ai installé le composant Query, donc on peut essayer de faire la requête SQL que je mets dans "SQL".

    Comment je peux faire pour stocker le résultat de la requête pour l'afficher dans un autre DBGrid... ( pour mettre les résultats dans un autre DBgrid j'entends ).

  3. #23
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    pour cela, il suffit que dans la propriété DataSource de ton nouveau TDBGrid tu indique de TDataSource que tu utilise pour ta connexion à la base de données, ensuite tu fait de même dans ton TQuery et dès que tu vas exécuter une requête dans ton TQuery, ton TDBGrid va se mettre à jour.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Ok , je pense avoir compris ce que tu veux dire, je vais essayer ça. Par contre j'ai déjà des difficultés à lancer une requête pour faire un tri ( http://www.developpez.net/forums/d24...trier-bdd-dbf/ ). Donc je vais attendre que ceci marche avant de me lancer dans la recherche.
    Si tu vois quelque chose, hésite pas à me le dire.

  5. #25
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dekalima Voir le message
    Je ne vois pas trop comment mettre une requête SQL dans du C++, j'ai jamais fait ça.
    Alors là il n'y a rien de plus simple. Par exemple si tu utilises DBE, il suffit de placer un composant TQuery. Il possède une propriété SQL qui est en fait une stringlist qu'il suffit de remplir avec les instruction SQL.

    On peut aussi le faire en code par exemple dans ton cas ça donnerais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          QRech = new TQuery(NULLl);
          QRech->SQL->Clear;
          QRech->SQL->Add("SELECT * FROM LaTable");
          sprintf(st,"WHERE Client=%s OR Produit=%s",Edit1->Text,Edit1->Text);
          QRech->SQL->Add(S);
          QRech->Open;
    Citation Envoyé par dekalima Voir le message
    Je préfererais trouver pourquoi cette méthode Locate marche pas
    Je comprend ça mais personnellement j'ai abandonné cette méthode depuis longtemps les requêtes SQL sont plus efficaces et très puissantes.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Merci pour ta réponse...

    En fait ça marche pas.
    J'ai mis le composant TQuery sur mon TForm et je l'ai "lié" à mon DataSource ( qui s'appelle chez moi DateSource1 ). Je l'ai activé après avoir mi la requête SQL qu'il y a plus haut dans ce topic ... et j'ai déclenché l'exécution de la requête quand j'appuies sur un bouton : ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Query1->Open();
    }
    Je suis pas trop un expers en SQL, je connais que les bases mais il doit manquer quelque chose là non ? Que manque-t-il?

    Pour info, j'ai lié mon composant Query1 au même composant DataSource que j'ai utilisé pour ma table...
    Faut pas en créer un autre non ?
    Je suis un peu dans le brouillard là ...

  7. #27
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Maintenant il faut récupérer le résultat de la requête. En fait il faut considérer la requête comme une table et la lire en la parcourant.
    Petit exemple où je met les produits trouvé dans une listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Query1->Open();
    while(!Query->Eof)
    {
    S=Query1->FieldValue["Produit"];
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    Le DataSource du query n'est pas indispensable. Il ne va servir que si on veut accéder au résultat de la requête avec un composant comme un DBGrid.

    Il existe de très bon tutoriel en Delphi la conversion vers le C est simple.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Merci à toi
    Par contre,dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S=Query1->FieldValue["Produit"];
    C'est quoi "S", et FieldValue sert à quoi ?

  9. #29
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    S est une chaine de caractère ( ça aurait pu être un entier si le champs produit avait été un entier)

    FieldValue permet de récupérer (ou de modifier) la valeur d'un champs d'une table (ou d'une requète)
    La valeur entre "" est le nom du champs.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    char* S;
    Query1->Open();
    while(!Query1->Eof)
    {
    S=Query1->FieldValues["Produit"];
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    j'ai l'erreur :[C++ Erreur] Unit1.cpp(70): E2034 Impossible de convertir 'Variant' en 'char *'

  11. #31
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    il suffit que tu appelle la méthode de conversion du Variant, ici pour un AnsiString par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString S;
    Query1->Open();
    while(!Query1->Eof)
    {
    S=Query1->FieldValues["Produit"].AnsiString();
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    J'ai toujours une erreur: [C++ Erreur] Unit1.cpp(70): E2316 'AnsiString' n'est pas un membre de 'Variant'. Bizarre.........

  13. #33
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Exuse moi, voici le bon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString S;
    Query1->Open();
    while(!Query1->Eof)
    {
    S=AnsiString(Query1->FieldValues["Produit"]);
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  14. #34
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par pottiez Voir le message
    Salut,
    il suffit que tu appelle la méthode de conversion du Variant, ici pour un AnsiString par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString S;
    Query1->Open();
    while(!Query1->Eof)
    {
    S=Query1->FieldValues["Produit"].AnsiString();
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    Dans l'exemple que j'ai donné je l'ai testé et sa marche bien sans mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    S=Query1->FieldValues["Produit"].AnsiString();
    Maintenant il faut voir le contenu de la table le champs produit est il une chaine de caractère?
    Envoie ton code
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  15. #35
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    Dans l'exemple que j'ai donné je l'ai testé et sa marche bien sans mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    S=Query1->FieldValues["Produit"].AnsiString();
    Maintenant il faut voir le contenu de la table le champs produit est il une chaine de caractère?
    Envoie ton code
    Effectivement, déclarer S en AnsiString doit suffire, la il l'avais mis en char* à l’origine
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Hum, j'insère des valeurs dans la table de donnée ( paradox ) comme ça par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Form1->Table1->FieldByName("Client")->Value=Edit1->Text;
    Form1->Table1->FieldByName("Produit")->Value=ComboBox1->Text;
    Form1->Table1->FieldByName("Expiration")->Value=Edit3->Text;
    Form1->Table1->FieldByName("Clef")->Value=Edit2->Text;
    ça commence à me casser les c****** ce truc

  17. #37
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    OK, j'avais pas vu ta modification pottiez, bon la compilation marche là.
    Je devrais y arriver d'ici une semaine pf...

    En attendant, quand je clique sur le bouton qui est censé afficher dans la ListBox1 j'ai

    " le projet a provoqué une classe d'exception EVariantTypeCastError avec le message Impossible de convertir le variant de type(Null) en type(string).... ect

  18. #38
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dekalima Voir le message

    En attendant, quand je clique sur le bouton qui est censé afficher dans la ListBox1 j'ai

    " le projet a provoqué une classe d'exception EVariantTypeCastError avec le message Impossible de convertir le variant de type(Null) en type(string).... ect
    Ah mais ça c'est le coup classique de la chaine vide ou NULL. Il faut savoir que dans les base de donnée le champs d'un table peut avoir une valeur spécifique qui est NULL. Sauf erreur de ma part ça été fait pour permettre que certains champs d'une table ne soit pas renseignés.
    Dans ces conditions il faut ajouter un petit test qui vérifie que le FieldValue n'est pas NULL avant de le passer à la chaine S.

    Allez courage ça va se faire personnellement j'ai aussi pas mal galéré avant d'y arriver
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  19. #39
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    J'ai testé pour if, mais j'ai pas trouvé, ça marchait toujours pas ... peux tu me l'écrire que je compare ?
    En revanche:

    J'ai essayé autre chose qui semble marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query1->Open();
    while(!Query1->Eof)
    {
    ListBox1->Items->Add(Query1->FieldByName("Client")->AsString);
    Query1->Next();
    }

    Avec pour requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM NouveauTest ORDER BY Client;
    Ici ,je cherche à tout sélectionner dans ma table "NouveauTest" et trier tout par ordre alphabetique dans la champ "Client". ( mais les autres champs doivent suivrent )



    Problème:

    J'ai que le premier champ de la ligne qui s'affiche
    Par exemple : la ligne numéro 1 par ordre alphabetique est :

    ARTHUR WORD 20/09/85 ECDFHGK


    J'ai que "Arthur" qui s'affiche

  20. #40
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Il faut lire aussi les autres champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM NouveauTest ORDER BY Client
    Veut dire sélectionne tous les champs de la table NouveauTest et ordonne chaque ligne en fonction du champs client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->FieldByName("Client")
    ne permet d'accéder qu'au champs Client de ta requête.
    Pour accéder aux autres champs (comme le champs produit par exemple) il faut ajouter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->FieldByName("Produit")
    ce qui donnerais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AnsiString S;
    Query1->Open();
    while(!Query1->Eof)
    {
    //S est utilisée pour clarifier le code
    S=Query1->FieldByName("Client")->AsString;
    S+=" "+Query1->FieldByName("Produit")->AsString;
    ListBox1->Items->Add(S);
    Query1->Next();
    }
    Pour avoir comme résultat
    Arthur Word
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. (VBA) Fonction de recherche dans une table
    Par cdurep dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/04/2013, 19h02
  2. [XL-2010] Formule : recherche dans une table pour un calendrier
    Par gandalf20000000 dans le forum Conception
    Réponses: 3
    Dernier message: 27/12/2011, 11h42
  3. [MySQL] Recherche dans une table - petit bug affichage multiple pour certaine recherche
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/01/2010, 09h44
  4. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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