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 )
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 )
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 ).
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 .
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.
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
Je comprend ça mais personnellement j'ai abandonné cette méthode depuis longtemps les requêtes SQL sont plus efficaces et très puissantes.
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;
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 là
Rémi
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 :
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void __fastcall TForm1::Button2Click(TObject *Sender) { Query1->Open(); }
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à ...
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
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.
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(); }
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 là
Rémi
Merci à toi
Par contre,dans:
C'est quoi "S", et FieldValue sert à quoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part S=Query1->FieldValue["Produit"];
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 là
Rémi
avec ce code:
j'ai l'erreur :[C++ Erreur] Unit1.cpp(70): E2034 Impossible de convertir 'Variant' en 'char *'
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(); }
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 .
J'ai toujours une erreur: [C++ Erreur] Unit1.cpp(70): E2316 'AnsiString' n'est pas un membre de 'Variant'. Bizarre.........
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 .
Dans l'exemple que j'ai donné je l'ai testé et sa marche bien sans mettre
Maintenant il faut voir le contenu de la table le champs produit est il une chaine de caractère?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 S=Query1->FieldValues["Produit"].AnsiString();
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 là
Rémi
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 .
Hum, j'insère des valeurs dans la table de donnée ( paradox ) comme ça par exemple:
ça commence à me casser les c****** ce truc
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;
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
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 là
Rémi
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:
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 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM NouveauTest ORDER BY Client;
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
Il faut lire aussi les autres champs.
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 SELECT * FROM NouveauTest ORDER BY Client
ne permet d'accéder qu'au champs Client de ta requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Query1->FieldByName("Client")
Pour accéder aux autres champs (comme le champs produit par exemple) il faut ajouter.
ce qui donnerais
Code : Sélectionner tout - Visualiser dans une fenêtre à part Query1->FieldByName("Produit")
Pour avoir comme résultat
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(); }
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 là
Rémi
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager