Accueil > Manip’s > Delphi > ACCESS > "cette opération n’est pas autorisée si l’objet est ouvert"
Delphi,AdoConnection
"cette opération n’est pas autorisée si l’objet est ouvert"
Erreur
mercredi 29 décembre 2010, par
"cette opération n’est pas autorisée si l’objet est ouvert"
Message d’erreur renvoyé après l’instruction
- AdoConnection1.Connected := True
Type Erreur :
Avertissement non fatal
Mais très agaçant !
RAISON
Une autre instruction a déjà ouvert la Base de façon implicite
SOLUTION
La solution n’est pas dans le code UNIT
Mais dans le code PROGRAM
Program correspond aux quelques lignes de code Pascal contenues dans le fichier project.dpr
Projet.dpr s’ouvre par le menu :
- Projet
-
- Voir le source
Ce fichier source de gestion de stock génère une erreur qui interdit et l’ouverture et la fermeture de la connexion par programmation.
program gynstock ;
uses
- Forms,
- Unit1 in ’Unit1.pas’ Form1,
- DataModule in ’DataModule.pas’ DataModule1 : TDataModule,
- Unit2 in ’Unit2.pas’ Form_STOCK,
- Unit3 in ’Unit3.pas’ Form_TABLES,
- Unit4 in ’Unit4.pas’ Form_FOURNISSEURS ;
$R *.res
- begin
- Application.Initialize ;
- Application.Title := ’GynStock’ ;
- ApplicationCreateForm(TDataModule1, DataModule1) ;
- Application.CreateForm(TForm1, Form1) ;
- Application.CreateForm(TForm_STOCK, Form_STOCK) ;
- Application.CreateForm(TForm_TABLES, Form_TABLES) ;
- Application.CreateForm(TForm_FOURNISSEURS, Form_FOURNISSEURS) ;
- Application.Run ;
end.
Ce fichier est débogué et ne génère plus l’erreur,
- Or une seule une ligne a été replacée
program gynstock ;
uses
- Forms,
- Unit1 in ’Unit1.pas’ Form1,
- DataModule in ’DataModule.pas’ DataModule1 : TDataModule,
- Unit2 in ’Unit2.pas’ Form_STOCK,
- Unit3 in ’Unit3.pas’ Form_TABLES,
- Unit4 in ’Unit4.pas’ Form_FOURNISSEURS ;
$R *.res
begin
- Application.Initialize ;
- Application.Title := ’GynStock’ ;
- Application.CreateForm(TForm1, Form1) ;
- Application.CreateForm(TDataModule1, DataModule1) ;
- Application.CreateForm(TForm_STOCK, Form_STOCK) ;
- Application.CreateForm(TForm_TABLES, Form_TABLES) ;
- Application.CreateForm(TForm_FOURNISSEURS, Form_FOURNISSEURS) ;
- Application.Run ;
end.
Le DataModule contenant les Tables et gérant la connexion
- était en première position dans la section Begin
- Alors qu’il était déclaré en seconde dans la section Use
Son placement dans l’ordre :
- APRES form1
- Fixe le gag
Car le DataModule est Utilisé dans le code Unit1 du Form1 (MainForm)
La création du Form1 doit donc précéder la tentative de connexion.
Il est alors simple de placer un test simple dans le Create du DataModule,
if Adoconnection1.Connected = True then AdoConnection1.Close ;