Exemple compo. mysql - ttreeview - pour davix123

0/5 (4 avis)

Vue 10 393 fois - Téléchargée 1 451 fois

Description

Exemple en reponse a la question de davix123 dans le forum en reference au chargement d'une table MySql dans un TreeView :

-----------------------------
le message du forum [au cas ou il disparaisse plus tard]
----------------------- A Lire depuis la fin -------------------------------
La procedure est lancé simple par un LoadTree. Voici la partie du code qui en fait l'appel

MySQL.Host:=host;
MySQL.login:=user;
MySQL.Password:=pass;
MySQL.Database:=base;
if MySQL.Connect<0 then
begin
showmessage('PB de connexion à la base de données');
application.terminate;
end;
res:=MySQL.Query('select * FROM UTILISATEUR where IDUSER='+lid+';');
if res<>nil then
begin
try
Row := Mysql.mysql_fetch_row(Res);
while Row <nil do
begin
llogin:=row[1];
lprenom:=row[3];
lnom:=row[4];
Row := mysql.mysql_fetch_row(Res);
end;
finally
Mysql.mysql_free_result(Res);
end;
end;
Premier.Caption:=premier.Caption+' - Utilisateur : '+lprenom+' '+lnom;
Loadtree;

Jusqu'à la fin de LoadTree, tout se passe bien.

Il y a une procedure pour faire un popupmenu sur Click, en voici le code :
procedure TPremier.TreeView1Click(Sender: TObject);
var NewItem: TMenuItem;
Res : PMYSQL_RES;
Row : PMYSQL_ROW;

begin
popupmenu1.Items.Clear;
if treeview1.Selected.Level=0 then
begin
NewItem := TMenuItem.Create(PopupMenu1);
PopupMenu1.Items.Add(NewItem);
NewItem.Caption := 'Ajouter Entité ';
NewItem.Tag := 0;
NewItem.OnClick := PopupMenuItemsClick;
NewItem := TMenuItem.Create(PopupMenu1);
PopupMenu1.Items.Add(NewItem);
NewItem.Caption := 'Supprimer Entité ';
NewItem.Tag := 1;
NewItem.OnClick := PopupMenuItemsClick;
NewItem := TMenuItem.Create(PopupMenu1);
PopupMenu1.Items.Add(NewItem);
NewItem.Caption := 'Ajouter Site ';
NewItem.Tag := 2;
NewItem.OnClick := PopupMenuItemsClick;
treeview1.Selected.DeleteChildren;
if not MySQL.Connected then showmessage('Pas Connecter au serveur MySQL')
else
begin
res:=MySQL.Query('select * from SITE where IDENTITE='+inttostr(treeview1.Selected.StateIndex)+';');
treeview1.Items.AddChild(treeview1.Selected,'Coucou');
treeview1.Selected.Expand(true);
end;
end;
end;

A l'appel de Mysql.query, l'appli plante. Si j'efface ce bout de code, pour mettre juste un Mysql.Query, ça plante. Si je met de MySQL.Query à la fin de LoadTree, ça fonctionne. Par contre, ça ne me sert à rien de le mettre là.

Merci

-------------------------------
Réponse au message :
-------------------------------

Euh... Pour l'instant, je ne vois pas pourquoi ça planterait !!

Peux-tu donner le code correspondant à l'appel qui fait planter le programme ? (utilise le mode pas-à-pas...)

Merci ;o)

Bestiol.

-------------------------------
Réponse au message :
-------------------------------

Voici le code de LoadTree :

procedure TPremier.loadtree;
var Res : PMYSQL_RES;
Row : PMYSQL_ROW;
noeux : TTreenode;

begin
res:=MySQL.Query('select * FROM ENTITE;');
if res<>nil then
begin
try
Row := Mysql.mysql_fetch_row(Res);
if row=nil then
begin
noeux:=TreeView1.Items.AddChild(nil,'Aucune entité');
noeux.ImageIndex:=-1;
noeux.SelectedIndex:=-1;
end;
while Row <nil do
begin
noeux:=TreeView1.Items.AddChild(nil,row[1]);
with noeux do
begin
ImageIndex:=0;
SelectedIndex:=0;
data:=pointer(0);
StateIndex:=strtoint(row[0]);
end;
Row := mysql.mysql_fetch_row(Res);
end;
finally
Mysql.mysql_free_result(Res);
end;
end;
end;

Davix

-------------------------------
Réponse au message :
-------------------------------

Pourrais-tu nous donner le code de ta procédure LoadTree ?

Ca aiderait peut-être à voir où se situe le problème...

@+
Bestiol.

-------------------------------
Réponse au message :
-------------------------------

Bonjour,
j'utilise le composant d'alexanderpopov présent sur ce site pour faire des connexions MySQL.

Mon programme fonctionne avec une TreeView. Pour la remplir avec les données du serveur Mysql, j'ai écris une procedure LoadTree; Celle-ci rempli correctement la TreeView. Par contre, tout appel à MySQL après cette procedure fait systématiquement planté l'application.

Le Message d'erreur est : Access Violation at adresse 100060C0. Read of adresse 100060C0.

Je ne comprend pas pourquoi ?

Ma procedure est déclarée avec toutes les procedures, et dans le programme, elle est écrite de la manière suivante :

procedure TForm1.Loadtree;
begin
...
end;

Merci de votre aide.

Davix

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_FAKHRO Messages postés 1 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 2 février 2009
2 févr. 2009 à 13:44
salut , je voudrai savoir comment faire pour synchroniser un treeview avec dbgrid

Meilleur salutations
xelah Messages postés 13 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 26 avril 2006
6 avril 2006 à 10:14
Bonjour, j'aurais voulu savoir si vous aviez aussi le source mais en considérant qu'on se connecte via module base de données (paradox) sous delphi directement????
merci beaucoup
davix123 Messages postés 21 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 6 octobre 2008
10 mars 2003 à 20:23
Merci pour ton exemple et tes conseils.
J'ai trouvé l'erreur, il s'agissait d'une fonction qui fermait un SplashScreen (SplashScreen.Release). Je ne comprend pas pourquoi ça créait un pb. En tout cas, je modifie mes requètes MySQL pour supprimer le *.
Davix
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
9 mars 2003 à 15:03
Merci AlexanderPopov !!
Ca c'est ce qu'on appelle du SAV !! lol

Bonne continuation !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.