Bonjour,
je vous remercie tous pour votre aide.
J'ai trouvé l'erreur, mais je ne comprend pas pourquoi.
Cette erreur est générée qu'avec des instructions MySQL, et pas par des instructions Delphi standard.
En fait, au démarrage de mon appli, je charge un SplashScreen. Dans le unit principal, avant l'instruction Application.run, je déchargeai le SplashScreen avec un TPlashScreen.close, puis entre un Try Finally, je vidais la Form par un TPlashScreen.release. En supprimant cette dernière instruction, je n'ai plus l'erreur.
Merci à Tous
Davix
-------------------------------
Réponse au message :
-------------------------------
> Fallait m envoyer un tit message usr ma boiboite delphifr, comme ca j aurais pu vous aide de suite car comme j ai un peu de travail par ci par la je ne pense pas tout le temps a regarder le forum, je vais te faire un exemple pour ton treeview voir un peu et je te l envoie.
>
> PoP
> ------------------
> ViVe Les ChatS
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Je suis désolé, je ne vois pas... N'importe qu'elle requête fait planter le prog ? Pasque sinon ça aurait pu être à cause du treeview...
> >
> > Je n'ai pas vraiment d'iddées, là !
> >
> > Essaye de mettre un truc genre "i := i + 1" après ton TreeView.Selected.DeleteChildren... Une instruction bidon... Ca m'est arrivé que l'erreur soit donnée une instruction après
> > qu'elle soit vraiment apparue ! Si c'est le cas ici, ton instruction bidon fera planter le prog avant le MySQL.Query...
> >
> >
> >
> > Bonne continuation !
> >
Bestiol.> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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
> > > > > >
> > > > >
> > > >
> > >
> >
>