Thrifto
-
19 sept. 2012 à 10:38
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 2015
-
19 sept. 2012 à 21:52
Bonjour,
Je commence la programmation DELPHI donc je pense que je ne me suis pas tromper de section pour poster ce message.
Comme je suis en apprentissage et que ce langage est tout nouveau pour moi je commence par certaines bases tels que l'utilisation d'un menu déroulant.
Trêve de bavardage je vous présente mon problème, j'ai une base de donnée en ACCESS, je me connecte dessus et je récupère ce que j'ai a récupérer par le biais d'un requête SQL qui m'affiche les données dans un DBGrid. Jusque là tous va bien !
Maintenant j'aimerai récupérer le nom des colonnes pour les mettre dans un menu déroulant, et par le biais de ce menu déroulant et d'un bouton, sélectionner la colonne et afficher son contenu dans un MEMO ou autre.
J'ai déjà parcourue ce forum et d'autres forum à la recherche d'une solution adapté à mon problème mais je n'ai rien trouvé qui correspond à ma demande
J'ai donc quelques essaies non fructueux à mon actif type :
procedure TForm1.DBComboBox1Change(Sender: TObject);
begin
ZQuery5.close ;
ZQuery5.SQL.Clear;
ZQuery5.SQL.add('SELECT * FROM TOTO');
ZQuery5.Open;
ZQuery5.First;
while not ZQuery5.Eof do
begin
DBComboBox1.Items.Add(ZQuery5.FieldByName('Colonne1').asstring);
ZQuery5.Next;
end;
end;
Qui n'affiche rien dans ma ComboBox.
J'en viens donc à vous demander de l'aide ou m'indiquer un cours qui m'aiguillerai sur une solution.
Merci d'avance !
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 20141 19 sept. 2012 à 15:03
Pour le DBgrid, tu as utilisé un ClientDataSet, essayes cela :
with TonClientDataSet begin
Open;
First;
DBComboBox1.Clear;
While not eof do begin
// Remplissage du ComboBox
DBComboBox1.Items.Add(FieldByName('Nom').AsString);
Next;
end;
end;
J'ai essayé ta méthode (en passant je pense que tu as oublier le do après mon client dataset) et non le problème reste le même, je précise que j'utilise ZEOS ACCESS pour accéder à ma base de donnée et je suis sous delphi7.
Merci de ton aide Jean j'apprécie :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Solution trouvée ! Donc toutes les méthodes présentées ici sont viables ! J'ai juste envie de rigoler de moi même mais j'essayé d'implémenter mon code dans le mauvais endroit, dans ma COMBOBOX en fait.
Le code devait être fait à l'extérieur (chose logique me direz vous mais non pas sur le moment).
Il ma donc suffi de déplacé tout ça dans mon FORM dans l’évènement OnShow et voilà mon menu déroulant affiche bien mes champs.
Maintenant est il possible d'afficher le nom des tables à la place des champs ? Je vais chercher de mon côté et peut être recréer un sujet pour ne pas encombrer celui là plus qu'il ne l'ai !
En tout cas je te remercie Jean et te souhaite une bonne continuation on aura peu être à ce revoir sous peu :D
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 19 sept. 2012 à 21:52
Bonsoir,
Je viens comme un cheveu sur la soupe, mais ton truc est tout simple. Tu veux choisir parmi les tables d'une DB, puis choisir les champs de la table, voir les index, ...
tu poses sur ta feuille: une DB db1, une table tb1, datasource ds1, un dbgrid gr1, un dbmemo dbEdit1. tu branches tout ca ensemble.
Ensuite bouton bt1, 3 listbox / combobox liTbl, liFld, LiIdx ok ?
Et voilà:
implementation
{$R *.DFM}
procedure TForm1.bt1Click(Sender: TObject);
begin
if not db1.connected then db1.open;
session.gettablenames( 'DB1', '*.*', true, false, liTbl.items );
end;
procedure TForm1.liTblClick(Sender: TObject);
var tname:string;
begin
with liTbl do tname := items[ itemindex ];
if tb1 .active then
begin
tb1.close;
tb1.IndexName := '';
dbEdit1.DataField := '';
end;
tb1 .tablename := tname;
tb1 .getfieldnames(liFld.items);
tb1 .getindexnames(liIdx.items);
tb1 .open;
end;
procedure TForm1.liIdxClick(Sender: TObject);
var iName : string;
begin
with liIdx do iName := items [ itemindex ];
tb1.indexname := iName;
end;
procedure TForm1.liFldClick(Sender: TObject);
var fName : string;
begin
with liFld do fName := items[ itemindex ];
dbEdit1 . datafield := fName;
end;
end.
//
tu select ta table, tes index (ta dbgrid changera de tri), ton champ (le memo affichera la connée) ...
salut.
solilog