Delphi - Erreur de Dingue

Delphi - Erreur de Dingue - Delphi/Pascal - Programmation

Marsh Posté le 25-10-2005 à 16:18:44    

Bonjour a tous,
 
Je fini de developper une application Delphi qui execute et affiche des rapports Crystal Reports.
 
Voici la facon dont je gere les composants crystal :
 
** Declarations  des composants **
CRreport1 : TCRreport;
CRapplication1 : TCRapplication;
CRviewer1 : TCRviewer;
 
 
 
** Codes **
 
CRreport1.ConnectTo(CRapplication1.OpenReport(CRtarget,crOpenReportbyTempCopy));
// CRtarget (string) contient le chemin vers le rapport //
 
CRviewer1.ReportSource := CRreport1.DefaultInterface;
Crviewer1.ViewReport;
 
CRreport1.DefaultInterface._Release;
 
Lors de l'ajout de cette derniere ligne, une erreur se produit lorsque je quitte l'application :
"Exception EAccessViolation dans le module ..."
 
Sans lien avec la premiere (jimagine),
une seconde erreur lors de l'affichage de certains rapports:
"Violation d'acces a l'adresse 77C473D4 dans le module 'msvcrt.dll'. Lecture de l'adresse 00D97000".
 
C'est donc un problem d'acces et si quelqu'un est specialiste dans la gestion des ces erreurs il est le bienvenu!
 
Remarque: Je tourne sur Win XP :-(
 
Merci a tous.
 
Niko.

Reply

Marsh Posté le 25-10-2005 à 16:18:44   

Reply

Marsh Posté le 25-10-2005 à 16:31:58    

Heu t'es sûr que c'est une bonne idée d'appeler ce "_Release" ? T'es pas censé l'appeler, et surtout pas si en plus l'objet est encore utilisé (puisque assigné à CRViewer1.ReportSource)
 
C'est pas un problème d'accès, mais un problème d'accès à une zone de mémoire à laquelle il ne faudrait pas accéder. Par exemple parce qu'un pointeur pointe vers un objet qui n'existe plus (qui a été supprimé "manuellement", via ton _Release par exemple)


Message édité par antp le 25-10-2005 à 16:32:57

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-10-2005 à 16:36:36    

Ok mais pourquoi les tutoriaux indiquent qu'il faut liberer le CRreport avant de fermer l'application ?
 
Je peut donc enlever cette ligne sans risquer d'avoir d'autres erreurs ?

Reply

Marsh Posté le 25-10-2005 à 18:10:09    

Ça dépend comment il est créé... il est créé comment ?
Mais là tu libères pas le CReport, tu libères un de ses éléments.
(et ce Release, tu le faisais à quel moment?)


Message édité par antp le 25-10-2005 à 18:10:26

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-10-2005 à 08:55:07    

Une form1 contient les edit et les combobox pour remplir les parametres des rapports.
Une form2 avec le viewer affiche simplement les rapports et c a lactivation de cette form que les composants sont initialises:
 
CRreport1.ConnectTo(CRapplication1.OpenReport(CRtarget,crOpenReportbyTempCopy));
 
// passage des parametres ici si necessaires //
 
CRviewer1.ReportSource := CRreport1.DefaultInterface;
Crviewer1.ViewReport;
 
Voila. Si je me limite a ces codes cela fonctionne.  
Simplement une erreur lors de l'affichage de certains rapports mais l'erreur ne survient pas toujour alors catastrophe pour en trouver la cause !
"Violation d'acces a l'adresse ... dans le module 'msvcrt.dll'. ..."
 
Ca me rend fou.
Merci.

Reply

Marsh Posté le 26-10-2005 à 09:47:35    

En tout cas si tu ne crées pas d'objet explicitement, tu ne dois normalement pas les détruire. Tout ce qui appartient à la Form sera libéré par celle-ci.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-10-2005 à 10:45:48    

Ok. C ce que jimaginait aussi.
Merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed