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

Delphi Discussion :

Problème composant AdoConnection


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    Février 2017
    Messages
    25
    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 : 25
    Points : 7
    Points
    7
    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
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    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 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . 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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    Février 2017
    Messages
    25
    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 : 25
    Points : 7
    Points
    7
    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
    25
    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 : 25
    Points : 7
    Points
    7
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    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.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    Février 2017
    Messages
    25
    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 : 25
    Points : 7
    Points
    7
    Par défaut
    Bonjour à tous,

    Bon, après avoir arpenté tout le Web, essayé x composants, j'ai enfin trouvé la cause de mon problème.
    J'effectue actuellement des tests avec FireDAC. (par espoir que ça parle à plus de monde que le composant ADO)
    J'effectue plusieurs tests de connexion et de lecture/écriture.

    Lorsque je fais uniquement le test de connexion, il se connecte correctement et me retourne correctement que je ne suis pas connecté si c'est le cas.

    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
    with FDConnection do Begin
        DriverName := 'mssql';
        params.Database := 'Qualite';
        params.DriverID := 'mssql';
        params.Password := 'service';
        params.Pooled := false;
        params.username := 'AdminTEST';
        params.Add('server=192.168.100.234');
        params.Add('Database=Qualite');
        params.Add('DriverID=mssql');
        //ConnectionString:='DriverID=mssql;Server=192.168.100.234;Database=Qualite;user_name=AdminTEST;password=service;';
        //connected := true;
      End;
     
      FDConnection.Close();
      try
        FDConnection.Open();
        ShowMessage('Test2');
      except
        ShowMessage('Test3');
      end;
      FDQuery.Connection:=FDConnection;
     
      if not FDConnection.Connected then
        begin
          ShowMessage('Test1');
        end;
    Jusques la tout va bien. Lorsque je fais un test de lecture/écriture, il me demande d'ajouter un connectionString (ConnectionString ou connection manquant). J'ajoute donc et la, ça marche également.

    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
    45
    46
    47
    48
    49
    50
    with FDConnection do Begin
        DriverName := 'mssql';
        params.Database := 'Qualite';
        params.DriverID := 'mssql';
        params.Password := 'service';
        params.Pooled := false;
        params.username := 'AdminTEST';
        params.Add('server=192.168.100.234');
        params.Add('Database=Qualite');
        params.Add('DriverID=mssql');
        ConnectionString:='DriverID=mssql;Server=192.168.100.234;Database=Qualite;user_name=AdminTEST;password=service;';
        //connected := true;
      End;
     
      FDConnection.Close();
      try
        FDConnection.Open();
        ShowMessage('Test2');
      except
        ShowMessage('Test3');
      end;
      FDQuery.Connection:=FDConnection;
     
      if not FDConnection.Connected then
        begin
          ShowMessage('Test1');
        end
      else
        Begin
          FDQuery.SQL.Clear;
          CommandeSQL := 'Select * From Event';
          FDQuery.SQL.ADD(CommandeSQL);
          FDQuery.Open;
          FDQuery.Last;
     
          if FDQuery.Fields[0].Value<>null then
            Begin
              Old_No_Event:=FDQuery.Fields[0].asInteger+1;
            End
          else
            Begin
              Old_No_Event:=1;
            End;
     
          CommandeSQL := 'Insert into Event values (' + inttostr(Old_No_Event) + ',''' + formatdatetime('yyyy/mm/dd',today) + ''',''' + timetostr(now) + ''',''Demarrage de l api soft'','''',''ApiSoftMou'');';
          FDQuery.SQL.Clear;
          FDQuery.SQL.Add(CommandeSQL);
          FDQuery.ExecSQL;
          FDQuery.SQL.Clear;
        End;
    Lorsque le serveur n'est pas joignable, j'ai le même problème qu'avec mes composants Ado, SQL, ...
    Le programme s'arrête sur le OPEN. Or, d'après mon constat suite aux tests, le problème ne viendrait pas de open mais de ConnectionString. Quelqu'un pourrait il éclairer ma lanterne.

    PS : Sergio merci pour le conseil de Zeos, je me suis renseigné sur le sujet et j'ai abordé le fait d'utiliser un composant non officiel, ma boîte n'est pas fan de l'idée ... Merci quand même.

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Pr3dators Voir le message
    PS : Sergio merci pour le conseil de Zeos, je me suis renseigné sur le sujet et j'ai abordé le fait d'utiliser un composant non officiel, ma boîte n'est pas fan de l'idée ...
    Je ne savais pas que Firedac pouvait être installé sur D2007 comme quoi...
    Pour le code par contre, j'ai beaucoup de choses à dire

    ce bout fait plusieurs fois la même chose ! je dois avouer n'utiliser aucune de ces manières qui plus est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with FDConnection do Begin
        DriverName := 'mssql';
        params.Database := 'Qualite';
        params.DriverID := 'mssql';
        params.Password := 'service';
        params.Pooled := false;
        params.username := 'AdminTEST';
        params.Add('server=192.168.100.234');
        params.Add('Database=Qualite');
        params.Add('DriverID=mssql');
        ConnectionString:='DriverID=mssql;Server=192.168.100.234;Database=Qualite;user_name=AdminTEST;password=service;';
        //connected := true;
      End;
    j'utilise plutôt quelque chose comme (Ecrit sans contrôle)
    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
     
     With fdConnection do 
      begin 
       DriverName := 'mssql'; 
       with Params as TFDPhysMySQLConnectionDefParams do
       begin
        Server:='192.168.100.234';
        DataBase:='Qualite';
        UserName:='AdminTEST';
        Password:='service';
        ..
      end;
      Try  
        Connected:=True;
        ShowMessage('Test2');
      except
        ShowMessage('Test3'); 
      end;
    le reste du code peut se simplifier en (j'ai juste un doute sur les CONVERT, MSSQL n'est pas sur mon poste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     if FDConnection.Connected then
       begin 
          // à Noter que ce code pourrait se mettre dans le AfterConnect de la FDConnection     
          FDQuery.SQL.Text:='Select MAX(id) from Event';  // avantage ne retourne qu'un seul enregistrement
          FDQuery.Open;
          if FDQuery.Fields[0].isnull then Old_NoEvent:=0;
          Inc(old_No_Event);
          FDQuery.Close;
     
          FDConnection.ExecSQL('INSERT INTO EVENT(:I,CONVERT(DATE,GETDATE(),101),CONVERT(TIME,GETDATE()),:d,NULL,:A)',
                                         [old_No_Event,'Démarrage de l''API soft','ApiSoftMou']);
       end;

    Mais tout ceci ne fonctionnera bien sûr pas s'il n'y a pas connexion
    Lorsque le serveur n'est pas joignable, ....
    ce qui est logique, un temps de réponse est nécessaire ,
    Le programme s'arrête sur le OPEN
    mais lequel de Open, il y en a deux dans le code.
    lire aussi ceci http://docwiki.embarcadero.com/RADSt...igne_(FireDAC)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Informatique Industrielle
    Inscrit en
    Février 2017
    Messages
    25
    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 : 25
    Points : 7
    Points
    7
    Par défaut
    Bonjour sergio,

    Les débuts sont hasardeux pour moi en effet.
    Pour ce qui est de FireDAC sur D2007, je ne pense pas que ce soit possible. J'effectue des tests avec Tokyo 10.2 en profitant du départ en vacance de mon collègue.

    Pour le open, il s'agit du premier présent dans le try / except.
    Je viens d'effectuer un test avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RessourceOptions.CmdExecMode := async
    qui a l'air de régler mon problème. Il passe bien dans le except si je n'arrive pas à me connecter et passe bien dans le not connected.

    Merci pour la requête avec Max(ID), ça va me faire gagner du temps de traitement.

    Je reviens ici si j'ai des problèmes sur les tests que je vais effectuer mais normalement il n'y a pas de raison.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

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

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