Bonjour tout le monde,
J'ai fait en Delphi un programme Setup qui installe la mise à jour d'un logiciel à l'intérieur d'un SelfExtractor. Le Setup fait plein de choses, comme copier des fichiers, écrire dans la base de registres, lire et écrire dans un fichier .ini, etc. Ça fait des années que je l'utilise et il a toujours bien été. Cette semaine, on me demande d'inclure une requête SQL avec ADOQuery. C'est un simple SELECT qui me permet de vérifier la version de la BD. Mais dès que le Setup fait appel à l'ADOQuery, le programme Setup reste bloqué en mémoire et la mise à jour ne se termine pas. On doit aller dans le gestionnaire de tâches et mettre fin au processus.
Voici la function problématique:
La fonction n'a aucun problème, elle renvoie bien la date de version. Le problème, c'est que le Setup ne se libère pas de la mémoire dès que je fais appel à cette fonction. Quelqu'un a une idée comment régler ce problème?
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 function TForm1.Version : TDateTime; Var code : string; a : TDateTime; ADOQuery1 : TADOQuery; begin a := 0; ADOQuery1 := TADOQuery.Create(nil); Try code := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; code := code + rep + '\MaBD.mdb'; code := code + ';Persist Security Info=False'; ADOQuery1.Connectionstring := code; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT ReleaseDate'); ADOQuery1.SQL.Add('FROM DBSystem'); ADOQuery1.Open; //ADOQuery1.Active := True; a := ADOQuery1.FieldList[0].asDateTime; Finally ADOQuery1.Close; ADOQuery1.Free; Application.ProcessMessages; ADOQuery1 := nil; end; Version := a; end;
Partager