SAlut
Alors voila je me fait un petit prog sans pretention de gestion de trousse a pharmatie(pour mon travail) .... et oui je bosse a la maison
, breff
Je 'travail' sur Delphi6 Perso et j'utilise MyLittleBase pour les base de données.
A la creation de ma Form principale je met ca:
Par contre mes Bases sont declarer sur une autre Form (Modul), j'ai commencé la prog sur Visual Basic et je trouvais bien pratique le principe des Moduls, il exist certainement quelquechose sous Delphi mais a defaut de savoir quoi je fait comme ca. Cette FormModul je la declare ensuite dans les Uses des Forms ayant à utiliser mes Bases.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TFPrincip.FormCreate(Sender: TObject); begin strpath:=extractfilepath(application.ExeName); if rightstr(strpath,1) <> '\' then strpath:=strpath+'\'; StrPath:=Strpath + 'Bases\'; if not DirectoryExists(StrPath) then if not CreateDir(StrPath) then raise Exception.Create('Impossible de créer le répartoire "Bases"'); BaseProd:=TMLB2.Create; if not fileexists(strpath + 'Produit.qwzt') then begin BaseProd.AddField('IDProd'); BaseProd.AddField('Nom'); BaseProd.AddField('PerimON'); BaseProd.SaveToMLBFile(strpath + 'Produit.qwzt'); end; BaseProd.LoadFromMLBFile(strpath + 'Produit.qwzt'); .... Etc pour les autres Bases
Voila pour le context
Ensuite quand l'utilisateur ferme:
Jusque la tout aller bien ... mais dernierement g fait des modifications, me demandez pas lesquelles je relance pas à chaque modification pour voir si ca tourne toujours. Et donc maintenant g une violation d'accés à la fermeture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TFPrincip.FormDestroy(Sender: TObject); begin // BaseProd.Free; BaseType.Free; BaseBoite.Free; BaseContenu.Free; End;![]()
J'ai effectué un pas à pas et je me suis rendu compte qu'une fois le OnDestroy de ma form principale appelé et mes Bases liberées, il execute du code contenu dans des ListViewSelectItem .... qui font elles meme reference a mes Bases ... que j'ai deja liberé ... si vous me suivez toujours
J'ai essayé de mettre des ListView.free dans le OnDestroy de ma Form Principale mais ca ne marche pas.
En ecrivant cette demande je me suis egalement demandé si en supprimant ma FromModule ca n'irai pas mieux ... malheureusement je ne peut pas, ou du moins je ne sais pas comment faire, car j'ai supprimé le typage de cette form pour ne pas avoir l'aspect graphique, un petit schema vaut mieux que de grandes paroles surtout que ca n'est pas trop mon fort donc voila le code
Bon voila je pense avoir fait la demande la plus complete possible, si vous avez des propositions voir meme des solutions je l'espere je reste dispo pour plus de renseignements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 unit Module; interface Uses Mlb2,Menus,StrUtils, SysUtils; { Déclarations publiques } Const Base_Produit=1; Base_Type=2; Base_Boite=3; Base_Contenu=4; Var StrPath: string; BaseProd : TMlb2; BaseType : TMlb2; BaseBoite: TMlb2; BaseContenu: TMlb2; Type TDateList = Array Of TDateTime; Type TIntList = Array Of Integer; Procedure InMenu(Choix: String); // Choix = Boite, Type, All Function SaveBase(BaseName : Integer):Boolean; Function CumulQeff(StrQList: String):String; Function ListDate(StrDateList: String):TDateList; Function ListQeff(StrListQeff: String):TIntList; implementation Uses Principale; Procedure InMenu(Choix: String); Var NewMnuItem:TMenuItem; Begin // Charger les boite et les types dans les menu correspondant if (Choix = 'Boite') Or (Choix = 'All') then Begin FPrincip.MnuMBoite.Clear; BaseBoite.SortByData('Nom',True); BaseBoite.GoFirst; While not BaseBoite.EndOfFile do Begin NewMnuItem:=TMenuItem.Create(FPrincip); NewMnuItem.OnClick:=FPrincip.MnuModifClick; NewMnuItem.Caption:=BaseBoite.GetData('Nom'); FPrincip.MnuMBoite.Add(NewMnuItem); BaseBoite.GoNext; End; BaseBoite.EndSeek; End; .... etc...
A++ Merci d'avance
Partager