IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Tester connection ADOConnection


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut 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 : 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
    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

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Pour désigner un chemin d'acccès a un fichier et écrire ce chemin dans ton .INI, j'aurais peut être préféré un TFileListBox ou qqchose dans le même genre.
    Je ne dis pas que cela règle le probleme de boucle, mais cela vaut peut être le coup d'essayer...

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Manque de temps pour lire votre code, désolé, néanmoins...
    Je vous joint un petit projet complet qui produit (par exemple) le fichier *ini suivant sur une base de donnée Access :
    [SITEMAIL.mdb]
    =

    [ Connection String ]=Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Program Files\Synapse\Data\SITEMAIL.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDBatabase Password="";Jet OLEDB:Engine Type=5;Jet OLEDBatabase 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 OLEDBon't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False


    [SITEMAIL.mdb/Enclosure]
    CodeParent =
    CodeUnic =
    Id =

    [SITEMAIL.mdb/Items]
    Archived =
    CodeOwner =
    CodeUnic =
    Copy =
    CreationTime =
    EnclosedDocument =
    Forward =
    From =
    Id =
    Image =
    Kind =
    MadeBy =
    ModifiedTime =
    Multiplepage =
    Nb =
    Ref# =
    SendOn =
    Sens =
    Subject =
    To =

    [SITEMAIL.mdb/SortOfContacts]
    Display =
    Family Name =
    First Name =
    Id =

    [SITEMAIL.mdb/SortOfKind]
    Id =
    SortOfKind =

    [SITEMAIL.mdb/SortOfSens]
    Id =
    SortOfSens =
    Dans les sources jointes, vous devrez changer les composants "menus" qui sont des composants Devexpress mais les évenements n'ont pas à être modifiés.
    J'espére que celà vous donnera des idées, il ne manque qu'une boucle sur le composant TAdotable pour remplir les types de champs... C'est pas un gros boulot
    Cordialement,
    Hauwke
    Fichiers attachés Fichiers attachés

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut 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

  5. #5
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par codial
    Bonsoir,

    ... Ce qui me surprend c'est que form1 est vide !!!!
    Cordialement
    Codial
    Y'a pas un Tmemo sur la fiche principale? Et n'est-ca pas ce même mémo que vous sauvegardez pour faire votre fichier *.ini?
    Cordialement,
    Hauwke

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    C'est normal que ton code boucle, car tu fais une ouverture de la base de données dans le OnBeforeConnect.
    En clair à chaque fois que tu fais ADOConnection1.Connected:=true;, il reexécute le OnBeforeConnect et il ne passe pas à la suite.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut 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 : 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
     
    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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/05/2015, 14h55
  2. Plusieurs connection (ADOConnection) à différentes BD Acces.
    Par Mustard007 dans le forum Bases de données
    Réponses: 19
    Dernier message: 21/10/2005, 08h29
  3. [Wifi]Logiciel pour tester une connection wifi ?
    Par genoud dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 15/08/2005, 13h29
  4. tester une chaine de connection
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2005, 13h32
  5. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo