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 :

Comment contrôler si la connexion à la base de donnée existe avant toute exécution ?


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut Comment contrôler si la connexion à la base de donnée existe avant toute exécution ?
    salut

    j'ai une application delphi qui est connecté à une base de données comme cela devrait se faire.

    Mais je souhaiterais pouvoir controler si la connexion à la base de donnée existe avant toute exécution de mon application.

    merci de me donner un coup de main

    a+
    La patience est un Chemin d'or

  2. #2
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    salut,

    Si c'est avec des tables paradox il faut tester avec le state de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if table1.state=dsInactive then showmessage('fermer')
    else
    showmessage('ouverte');
    ou avec ADO (access ou sqlServer):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If  ADOConnection1.Connected=true then showmessage('ouverte')
    else
    showmessage('fermer');
    mais tu ne précise pas quel type de BD tu utilise
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #3
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut
    re-salut
    en fait je souhaite faire une tentative de connexion à une base de données sqlserver avant toute exécution au niveau de l' unité principale mon projet delphi.

    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
    program fic;
     
    uses
      Forms,Dialogs,
      Unit1 in 'Unit1.pas' {Frm},
      dm in 'dm.pas' {Dmf: TDataModule};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      //dmf.Dbfic.Connected:=true ;
      Application.CreateForm(TFrm, Frm);
      Application.CreateForm(TDmf, Dmf);
      If  dmf.Dbfic.Connected=false then
      MessageDlg('Erreur de connexion au serveur',mtError,[mbYes],0)
      else
      Application.Run;
     
    end.
    a+
    La patience est un Chemin d'or

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    normalement c'est faisable dans l' unité principale du moment que tu as déjà creer la form qui contient la procedure de connection mais oû est le probleme ?
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    pardon j'ai pas bien regarder...
    Dans ton code si il n'y a pas de connection l'application démarre quand même si connected=false alors il ne faut pas executer Application.Run et mettre un exit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If  dmf.Dbfic.Connected=false then
     Begin
      MessageDlg('Erreur de connexion au serveur',mtError,[mbYes],0)
     FreeAndNil(dmf); //dans D6 
      exit; 
     End
     
      Application.Run;
    le else c'est pas la peine
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #6
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut
    re-salut

    merci pour la remarque.

    mais ce que je souhaiterais vraiment.
    c'est tenter la connexion au serveur sqlserver au lancement de mon application delphi.(le but étant de vérifier si le serveur sqlserver est démarré)

    Lorsque cette connexion échoue le message d'erreur est dans ce envoyé à l'ecran.

    voilà merci de me donner un coup de main pour cela

    a+
    La patience est un Chemin d'or

  7. #7
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    ta chaine de connexion elle est comment ?
    car il faut gerer cela dans les exception
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  8. #8
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par freud Voir le message
    ta chaine de connexion elle est comment ?
    car il faut gerer cela dans les exception
    salut

    j'y comprend rien !!

    comme je dis
    exemple lorsque j'arrete mon serveur sql server j'ai l' exception suivante que j'aimerais pouvoir donc gérér.


    Je souhaiterais donc pouvoir établir la connexion au serveur à partir de l'application au lancement.


    merci de me donner un coup de main
    a+
    La patience est un Chemin d'or

  9. #9
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    je crois que tu te connecte via odbc.
    bon dans le cas oû c'est via ADO voici comment je fait, je met la connexion dans une fonction qui me renvoi un boolean et je teste ce boolelan:

    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
     
    function Tdmf.Connect(): Boolean;
    Var
    UserName,PassWord,Host,Db :string;
    TimeOut:integer;
    begin
    Db:='ta base donnees'
    UserName:='le user';
    PassWord:='le mot de passe';
    Host:='nom de la machine ou adresse ip';
    TimeOut:=xxxxx; //délai en milli secondes aprés quoi si le serveur est inactif il répond qu'il est inactif
     
    with Tdmf.Dbfic do   
    Begin
    ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID='+UserName+';Pwd='+Password+';Initial Catalog='+Db+';Data Source='+Host;
    ConnectionTimeOut:=TimeOut;
     
    Try
     Begin
      Connected:=true;
      Result:=true;
     end;
    Except
     Result:=false;
    end;
    End; //with
    End;
    et dans l'unité principale tu appel la fonction en testant le boolean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If  dmf.Dbfic.Connect=false then
     Begin
      MessageDlg('Erreur de connexion au serveur',mtError,[mbYes],0)
     FreeAndNil(dmf); //dans D6 
      exit; 
     End
     
      Application.Run;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Totalement inutile car Dmf est créé via Application.CreateForm, et comme Application est libéré dans la section Finalization de l'unité "Forms" (voir DoneApplication), cela libère aussi les objets possédés comme dmf et Frm

    Cela pourrait même provoqué des RunTime Error 216 ...

    Inutile aussi !

    je ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    begin
      Application.Initialize;
      Application.CreateForm(TFrm, Frm);
      Application.CreateForm(TDmf, Dmf);
      If dmf.Dbfic.Connect() then
       Application.Run()
      else
        MessageDlg('Erreur de connexion au serveur',mtError,[mbAbort],0);
    end.
    Autre remarque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If  dmf.Dbfic.Connect=false then
    If  ADOConnection1.Connected=true
    DOIT s'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If not dmf.Dbfic.Connect then
    If ADOConnection1.Connected then
    les booléens sont fait pour cela, ...
    En terme de temps d'éxecution cela ne doit pas changer, je pense que le compilateur optimise cette façon non standard d'écriture des tests booléens (sans optimisation, cela ferait un test en plus ! donc plus lent)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    c'est plus propre
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2013, 10h20
  2. [EJB3] Comment catcher une erreur de connexion à la base de données
    Par chriscoolletoubibe dans le forum Java EE
    Réponses: 5
    Dernier message: 03/01/2011, 10h59
  3. Réponses: 5
    Dernier message: 16/03/2010, 10h35
  4. Réponses: 3
    Dernier message: 15/10/2009, 10h21

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