Bonjour,
Je suis sous Fedora 16 64bits et j'utilisais depuis un certain temps une application développée sous Lazarus qui fonctionnait correctement sous Lazarus 0.9.31. Et voilà, problème.
Je m'explique : j'ai écrit une application de gestion de données avec Sqlite ; je démarre une fiche principale et j'appelle d'autres fiches selon l'opération à réaliser par appui sur un bouton qui appelle l'autre fiche par ****.show comme ci-dessous :
Dans cette nouvelle fiche archiver, j'ouvre une base avec un filtre concernant la date du jour - 300 et un autre élément du filtre une variable à oui voir ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TFslcl.BArchiverClick(Sender: TObject); begin // archivage des données supérieures à 300 jours et validées if MTRANSFERT=False then TransfertPossible; Farchiver.Show; end;
Puis ensuite je lance une boucle de traitement des données sélectionnées où je copie l'enregistrement dans une table d'archivage et j'efface l'enregistrement dans bank.
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 TFarchiver.FormShow(Sender: TObject); begin // affichage des données archivables GridBank.Visible:=False; MVERIFIE:='OUI'; MCODEDATE:=FloatToStr(Date()-300); Q1:=quotedstr(MCODEDATE); Q2:=quotedstr(MVERIFIE); data.bank.Close; MQ:='Select * from BANK WHERE CODEDATE< ('+Q1+') AND VERIFIE= ('+Q2+')'; data.bank.SQL:=MQ; data.bank.Open; data.bank.ExecSQL; ENb.Text:=IntToStr(data.bank.RecordCount); ENb.Update; if data.bank.RecordCount=0 then begin MMESSAGE:='Pas de données à archiver'; MessageInformation; Close; end else BValider.Enabled:=True; end;
Le problème est que j'utilisais l'événement FormShow pour lancer l'affichage filtré au moment de l'affichage de la fiche.
Mon filtrage ne fonctionne plus et mon application recopie tous les éléments et vide donc ma table bank.
Cherchant à résoudre le problème, j'ai fait du pas à pas en modifiant mon application et je constate que l'événement FormShow est activé dès le lancement de mon application.
J'ai voulu remplacer FormShow par FormActivate mas je n'ai pas trouvé sur le Web en français l'explication de leur différence et leur usage.
Donc je trouve étrange d'avoir ce problème aujourd'hui et de ne pas trouver d'explication sur la différence entre ces 2 événements. L'ancien wiki avec des explications de programmation semble avoir disparu, ou bien je suis aveugle.
Merci d'avance pour une petite aide.
Partager