1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut Problème composant AdoConnection

    Bonjour,

    J'ai un petit soucis dans mon code, et je ne trouve pas de solution.

    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
      Nom_Serveur := Fichier_Ini.ReadString('Variables_globales','Nom_Serveur','');
      Password := Fichier_Ini.ReadString('Variables_globales','Password','');
      User_ID := Fichier_Ini.ReadString('Variables_globales','User_ID','');
      Nom_TableEvent := Fichier_Ini.ReadString('Variables_globales','Nom','');
      CatalogEvent := Fichier_Ini.ReadString('Variables_globales','Catalog','');
      CommandeSQL := 'Provider=SQLOLEDB.1;Password=' + Password + ';Persist Security Info=True;User ID=' + User_ID + ';Initial Catalog=' + CatalogEvent + ';Data Source=' + Nom_Serveur + ';';
      Consoletrace('test1',debugglevel1);
      with AdoConnectionEvent do Begin
        Close;
        loginPrompt:=False;
        ConnectionString:=CommandeSQL;
      End;
      Consoletrace('test2',debugglevel1);
      AdoConnectionEvent.Open();
      Consoletrace('test3',debugglevel1);
      AdoQueryEvent.Connection:=AdoConnectionEvent;
      Consoletrace('test4',debugglevel1);

    Lorsque mon serveur SQL est joignable, aucun problème. Lorsqu'il n'est pas joignable pour x raison, je reste planté au niveau de mon AdoConnectionEvent.Open();.
    J'ai également essayé avec des try/except sans résultat et également ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
        ADOConn.Connected := True;
      except
        on e: EADOError do
        begin
          MessageDlg('Error while connecting', mtError,
                      [mbOK], 0);
     
          Exit;
        end;
      end;
    sans résultat également. Même plantage, toujours avec le open et si utilisation d'un try, dans le try.

    Je vous remercie par avance pour l'aide apportée.
    Cordialement.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 498
    Points : 2 295
    Points
    2 295

    Par défaut

    AdoConnectionEvent , c'est quel type de composant ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    C'est un composant de type AdoConnection.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 498
    Points : 2 295
    Points
    2 295

    Par défaut

    et en remplaçant AdoConnectionEvent.Open(); par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdoConnectionEvent.Connected := True;
    ??

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Je viens de refaire le test et même problématique à la clé.
    Je n'ai pas de soucis avec les deux méthodes lorsque mon serveur est joignable mais lorsqu'il ne l'est pas, plantage.

    Cordialement.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 498
    Points : 2 295
    Points
    2 295

    Par défaut

    et le terme planté, il veut dire quoi ? message d'erreur ? ou attente infinie ?

    Dans le second cas, est-ce qu'il n'y a pas un timeout défini quelque part ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    attente infinie. Pas de message d'erreur.

    Oui, j'ai configuré un timeout mais ça n'y change rien.
    De plus, le timeout de base est configuré à 30 sec mais même en attendant plus de 30 sec, ça ne marche pas non plus.

    Cordialement.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    De base, la connexion au serveur est synchrone.
    Si je passe le type de connexion en asynchrone, cela pourrait il me débloquer ?

    Cordialement

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Je reviens aux nouvelles.
    Le mode asynchrone me permet de passer mon open sans encombres. ( Enfin un bon point )
    Par contre, je n'arrive pas à tester la suite si mon serveur est OFF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not AdoConnectionEvent.Connected then
    Toujours pas de message d'erreur mais je bloque sur ce point.

    Cordialement.

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 2 944
    Points : 8 103
    Points
    8 103

    Par défaut

    Pourquoi ne pas tenter une requête pour voir si la BDD répond ? Style "SELECT now AS temps FROM matable"
    Delphi 5 Pro - Delphi 10.1 Berlin Starter Edition - CodeTyphon 6.15 sous Win 7 et 5.20 sous Ubuntu 14.04
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Ma BDD ne répond pas puisque mon serveur est débranché.

    Je me suis peut être mal exprimé. Je n’essaie pas de communiquer avec le serveur mais à rentrer dans ma condition si justement le serveur ne répond pas. (Mon code fonctionne si mon serveur est UP)

    Edit : Je viens de relire ton message et ma réponse est hors sujet.
    Le problème c'est que le adoconnection n'est pas configuré, pas d'adoconnection.connectionstring, pas d'odoconnection.open/.connected du coup je ne peux pas utiliser mon adoquery.connectionstring. Hormis, si je ne me trompe pas, de forcer adoconnection.connectionstring directement avec ma chaîne de connexion mais je ne sais pas ce que ça fait.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    J'ai trouvé un truc du genre avec un composant TSQLConnection

    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
    //Permet de ne pas afficher la fenêtre de demande de mot de passe
      ConnexionSQL.LoginPrompt:=False;
     
      //Adresse_IP, Nom_Base_User et MotdePasse doivent être stocké dans un fichier ini
      ConnexionSQL.Params.Values['drivername']:='MSSQL';
      ConnexionSQL.Params.Values['schemaoverride']:='%.dbo';
      ConnexionSQL.Params.Values['hostname']:=Adresse_IP;
      ConnexionSQL.Params.Values['database']:=Nom_Base_SQL;
      ConnexionSQL.Params.Values['user_name']:=User;
      ConnexionSQL.Params.Values['password']:=MotdePasse;
      ConnexionSQL.Params.Values['blobsize']:='-1';
      ConnexionSQL.Params.Values['localecode']:='0000';
      ConnexionSQL.Params.Values['mssql transisolation']:='ReadCommited';
      ConnexionSQL.Params.Values['os authentication']:='False';
      ConnexionSQL.Params.Values['prepare sql']:='False';
    Comment pourrais-je mettre la chose de façon similaire avec un AdoConnection. Sachant que Params n'existe pas pour ce type d'objet.

    Cordialement.


    EDIT: Directement passer avec un AdoQuery.Parameters ???

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    Je viens aux nouvelles suite à de nouveaux tests.
    J'ai essayé de remplacer mes composants ADOConnection et AdoQuery par les composants SQLConnection et SQLQuery.
    Cela n'a réglé en aucun cas mon problème, je suis exactement au même cas de figure que sur les tests précédents.

    Si un sauveur pouvait enlever son masque, ...

    Cordialement.

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 542
    Points : 19 943
    Points
    19 943
    Billets dans le blog
    4

    Par défaut

    Bonjour,

    si jusqu'à présent je n'ai pas mis mon grain de sel c'est que ADO et moi cela fait plus que 2 car je suis loin d'être un fan de ADO et de tout ce qui est multi-couches (OLE ou autres) d'ailleurs !
    TSQLConnexion ? C'est également pour moi un inconnu.

    Quel est le problème en fait : Détecter si une base de données est joignable ou non et ce avec un délai (timeout) convenable (et, si possible, configurable).

    Comment je réagis face à cette difficulté ?

    Phase 1 : tester si le serveur est en ligne (et non le service de base de données) en première approche, pour ce faire j'utilise le composant Ping de ICS plutôt qu'un Ping de Indy beaucoup plus lent. (reste cependant un risque de sécurité détecté par certains antivirus) mais il y a là matière a une autre discussion sur le "comment tester si un poste est en ligne ?"

    Phase 2 : seulement si le poste est présent je passe à la connexion. Certaines suites de composants permettent un Ping de la BDD i.e ZEOSDBO, Firedac (une fois la chaine de connexion établie bien évidemment) d'autres non. Mais cela dépend également du SGBDR ! Donc pour faire simple la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    try database.connect except  end; 
    if dataBase.Connected then ... else ... end;
    a du bon.

    Phase 3 : Reste à jouer sur les TimeOuts de la SGBD si c'est possible et les réglages ne sont pas simples

    P.S. nulle part je n'ai lu d'indication sur la version de Delphi utilisée les directions que je donne (ZEOSDBO,ICS) sont toutefois possibles dès D7 avec certitude bien que je n'ai employé ce genre de code qu'à partir de D2010
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    Merci pour ta réponse, je vais étudier les différents points d'approche que tu me proposes.
    Oui, j'ai oublié de précisé ma version de Delphi, Sorry ... J'utilise CodeGear Delphi 2007. ( On arrête pas le progrès )

    Je reviens vers toi aprés avoir effectué mes tests. J'ai déjà fait un ping de l'adresse de la machine, réglant mon problème en partie. En effet, si j'arrive a ping la machine qui est sur le serveur et que le service est arrête, je me retrouve à nouveau dans mon cas de figure.
    Je m'en vais tester tous ça. Merci.

    Cordialement.

    EDIT : Quand tu dis que le configuration d'un timeout n'est pas simple, pour toi le AdoConnection.TimeOut n'est pas suffisant ? Il y aurait autre chose à paramétrer, faire ?

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Informatique Industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : février 2017
    Messages : 14
    Points : 5
    Points
    5

    Par défaut

    Bon j'ai regardé le composant ZEOS, j'ai réussi à l'installer dans Delphi.
    Cependant j'ai un soucis lors de l'utilisation. Pour régler ce soucis, j'ai vu qu'il fallait mettre une batterie de fichier DCU dans le dossier d'installation du compilateur. Le soucis c'est que je n'ai pas cette batterie de fichier DCU. Lorsque je télécharge le dossier ZEOS, les fichiers DCU ne se trouvent pas à l'intérieur.
    Link : https://sourceforge.net/projects/zeo...-7.1.4-stable/

    Cordialement.

  17. #17
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 542
    Points : 19 943
    Points
    19 943
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Pr3dators Voir le message
    EDIT : Quand tu dis que le configuration d'un timeout n'est pas simple, pour toi le AdoConnection.TimeOut n'est pas suffisant ? Il y aurait autre chose à paramétrer, faire ?
    je pensais plus au timeout de la BDD (du moins dans mon cas : Firebird),[/mode Troll]vu mon avis partiel sur ADO je ne suis pas sur que le ADOTimeOut ne s'ajoute pas au TimeOut du SGBD [/mode]


    Cependant j'ai un soucis lors de l'utilisation. Pour régler ce soucis, j'ai vu qu'il fallait mettre une batterie de fichier DCU dans le dossier d'installation du compilateur. Le soucis c'est que je n'ai pas cette batterie de fichier DCU. Lorsque je télécharge le dossier ZEOS, les fichiers DCU ne se trouvent pas à l'intérieur.
    ce n'est qu'un problème d'installation et de chemin dans les options de Delphi.
    via mon blog tu peux avoir accès a mon début de tutoriel sur les composants ZEOS . Jamais fini, donc jamais corrigé techniquement et orthographiquement, il me faudra beaucoup d'encouragements (y'en a pas eu des masses et pourtant Gilles m'a indiqué une recrudescence de lecture) pour le finir car maintenant que j'utilise Firedac j'ai laissé ZEOS de côté. Mon problème c'est que je le cite de plus en plus ce tuto et mon prochain tutoriel en cours d'écriture y fait aussi référence (avec une version Starter ou pro on peut installer ZEOS et donc attaquer les bases de données !)
    En tout cas la partie installation, même s'il s'agissait d'une ancienne version, est complète du moins à ma souvenance.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

Discussions similaires

  1. problème composant datetimepicker
    Par imladris dans le forum ASP.NET
    Réponses: 5
    Dernier message: 06/04/2007, 12h51
  2. [VB.NET] Problème Composant Calendar
    Par mafyoso dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2007, 16h42
  3. [VB] Problème composants COM Word
    Par Vince dans le forum VBA Word
    Réponses: 5
    Dernier message: 08/12/2005, 11h18
  4. problème Liaison ADOconnection avec AdoQuery
    Par Vodkha dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/09/2005, 17h11
  5. Problème composant Oracle
    Par alexmorel dans le forum Bases de données
    Réponses: 12
    Dernier message: 24/02/2004, 09h53

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