[EOleException] Destroy sur un objet TADOConnection
Salut à tous :coucou:
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 :
Code:
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; |
Durant toute la durée de vie de l'application, je fais des appels de données via des fonctions de ce type :
Code:
1 2 3 4
| function TBD_BAL.listeClasses : TADOQuery;
begin
Result:=Query('select * from niveaux order by nom');
end; |
ou de ce type là :
Code:
1 2 3 4
| function TBD_BAL.supprimerLivre(isbn : string) : boolean;
begin
Result:=execQuery('delete from livres where isbn=''' + isbn + '''');
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:
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; |
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:
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 :
Citation:
Impossible de modifier la propriété ActiveConnection d'un objet Recordset avec un objet Command comme source
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 :
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...
:help: