Salut à tous
J'écris sur ce forum car je rencontre un souci dans le développement d'une application sous Delphi 7.
Il s'agit d'une application de gestion de données, autour d'une base de données Access 2003. Je fais la liaison entre l'appli et la base de données via une classe que j'ai créé. Cette classe utilise un objet TADOConnection que j'initialise au lancement de l'application :
Durant toute la durée de vie de l'application, je fais des appels de données via des fonctions de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Application.Initialize; connectBD:=TADOConnection.Create(connectBD); cheminBD:=ExtractFilePath(Application.ExeName) + 'BAL.mdb'; chaineCnx:='Provider=Microsoft.Jet.OLEDB.4.0;' + 'User ID=Admin;' + 'Data Source=' + cheminBD + ';' + 'Mode=Share Deny None;Extended Properties="";' + 'Jet OLEDB:Engine Type=5;'; connectBD.ConnectionString:=chaineCnx; connectBD.LoginPrompt:=false; connectBD.Connected:=true;
ou de ce type là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function TBD_BAL.listeClasses : TADOQuery; begin Result:=Query('select * from niveaux order by nom'); end;
Dans tous les cas, c'est les fonctions "Query" et "execQuery" qui sont chargées de faire le lien avec la base de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function TBD_BAL.supprimerLivre(isbn : string) : boolean; begin Result:=execQuery('delete from livres where isbn=''' + isbn + ''''); end;
Lorsque le programme est fermé, j'appel une fonction qui se charge de fermer la base de données et de libérer l'espace utilisé par les objets en mémoire :
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 function TBD_BAL.Query(rsql : string) : TADOQuery; begin Result:=nil; Result:=TADOQuery.Create(Result); With Result Do Begin Close; Connection:=connectBD; SQL.Clear; SQL.Add(rsql); Prepared:=true; Open; End; end; function TBD_BAL.execQuery(rsql : string) : boolean; var Q : TADOQuery; i : integer; begin Q:=nil; Q:=TADOQuery.Create(Q); With Q Do Begin Close; Connection:=connectBD; SQL.Clear; SQL.Add(rsql); Prepared:=true; i:=execSQL; End; Q.Free; If i=0 Then Result:=false else Result:=true; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 destructor TBD_BAL.fermer; begin connectBD.Connected:=false; connectBD.Close; connectBD.ConnectionString:=''; connectBD.Free; end;
Voilà, je sais que ça fait un peu pagaille de tout pondre comme ça sur le forum, mais c'est histoire que vous ayez toutes les données.
J'en arrive maintenant au problème : lorsque je ferme l'application, on me renvoi l'erreur :
Grâce au pas à pas, je sais qu'il s'agit d'une exception de type EOleException, et qu'elle se produit au moment ou je fais appel à la commande :Impossible de modifier la propriété ActiveConnection d'un objet Recordset avec un objet Command comme source
Savez-vous d'où viens l'erreur ? N'étant pas un expert de l'utilisation des objets ADODB, j'ai fait un peu comme j'ai pu en lisant les tutoriels, mais j'ai l'impression d'avoir un peu développé ça à l'arrache...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ConnectBD.free;
![]()
Partager