Tester connection ADOConnection
Bonjour,
Pour tester la connection, notamment lors de la première utilisation, sur l'évènement BeforeConnect de mon ADOConnection, j'ai écrit ce code.
Ce que je ne comprends pas c'est que si la base n'est pas trouvée la proc boucle entre path:=ExtractFilePath(Application.EXEName) et ADOConnection1.Connected:=true sans écrire dans le fichier ini. J'ai oublié quoi?
Je vous soumet ma proc avec quelques commentaires
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 35 36 37 38 39 40 41 42 43 44
|
//================================================
procedure TDM.ADOConnection1BeforeConnect(Sender: TObject);
begin
path:=ExtractFilePath(Application.EXEName);
FichierIni :=TIniFile.Create(path+'CDJ.ini');
BaseEnCours:=FichierIni.ReadString('DataBase','DataSource','nonbd');
if FileExists(BaseEnCours) then
begin
//ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=' +BaseEnCours
+';Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'
+'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;'
+'Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";'
+'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;'
+'Jet OLEDB:Don''t Copy Locale on Compact=False;'
+'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
ADOConnection1.Connected:=true;
exit;
end
else
ShowMessage('Impossible de trouver le fichier de données.' + chr(10) + chr(13)+'Il a peut-être été déplacé ou renommé.'+chr(10)+chr(13)+'Indiquez l''emplacement de ce fichier');
with TOpenDialog.Create(Application) do
begin
Title := 'Ou se trouve le fichier de données?';
Filter := 'Fichier CDJ (*.mdb)|*.mdb';
if Execute then
if FileExists(FileName) then
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ Filename + ';Persist Security Info=False';
ADOConnection1.LoginPrompt := false;
ADOConnection1.Connected:=true;
===> ici il boucle au début de procédure sans ecrire dans le fichier ini //Ecrire dans le fichier ini
FichierIni.WriteString('DataBase','DataSource',FileName);
end
else
begin
ShowMessage('Erreur! Aucun fichier de sélectionné.');
ADOConnection1.Connected:=false;
Application.Terminate;
Ici quand je clique sur le bouton annuler de la boite 'Ouvrir fichier' L'application ne se termine pas !!!!! On retrouve la boucle précédente. end;
end;
end; |
D'avance merci
Codial
Tester connection ADOConnection
Bonsoir,
je vous remercie pour vos réponses, je vais tester le code de Hauwke. Ce qui me surprend c'est que form1 est vide !!!!
Cordialement
Codial
Tester connection AdoConnection
Bonjour,
Hauwke mon fichier ini est ecrit après un OpenDialog, mais si il y a bien un TMemo sur la fiche!
Malabar: j'ai réécrit mon test:
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
|
procedure TDM.ADOConnection1BeforeConnect(Sender: TObject);
begin
try
path:=ExtractFilePath(Application.EXEName);
FichierIni :=TIniFile.Create(path+'CDJ.ini');
BaseEnCours:=FichierIni.ReadString('DataBase','DataSource','nonbd');
if FileExists(BaseEnCours) then
begin
ADOConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='
+ ExtractFileDir(paramStr(0)) + BaseEnCours //'\Data\CDJ_DATA.mdb'
+';Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'
+'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;'
+'Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";'
+'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;'
+'Jet OLEDB:Don''t Copy Locale on Compact=False;'
+'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
end
else
showmessage('Le fichier n''existe pas!!!');
application.Terminate;
except
showmessage('Erreur');
end;
end; |
Mais si le fichier n'est pas trouvé il passe le else, affiche bien le message mais ne quitte pas l'application sur: application.Terminate mais il continue à tester les application.create
../..
Application.CreateForm(TfrmChantiers, frmChantiers);
Application.CreateForm(Tsai_suivi, sai_suivi);
etc....
../..
au lieu de quitter. Tu as une idée du pourquoi? Ce qu'il faudrait c'est qu'il quitte le prog.
Cordialement
Codial