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

Lazarus Pascal Discussion :

Echec d'une connexion distante [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut Echec d'une connexion distante
    Bonjour à tous

    La connexion de IBConnection réussi sur un réseau local, mais elle échoue sur un réseau virtuel (ex: en utilisant IP trouvée sur MyIPAdress.com)
    Pourquoi?

    message d'erreur:
    Nom : RD.png
Affichages : 457
Taille : 38,1 Ko

    merci d'avance.

  2. #2
    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
    Bonjour,
    Je pense que cette IP publique est commune à ton réseau local (c'est celle du routeur). Il faut que ton routeur redirige les demandes sur ce port arrivant à cette adresse externe (publique) vers l'IP du PC qui héberge la BDD sur le réseau local interne (privé).
    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 !

  3. #3
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour

    Comment dois-je reconfigurer le serveur?
    et lui attribuer probablement un numéro de port?

  4. #4
    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
    Si le problème est bien celui que je suppose (tu es sur un réseau externe à celui qui héberge le serveur), c'est le routeur du réseau du serveur qu'il faut configurer pour accepter de rediriger les paquets arrivant pour le port du serveur sur l'IP locale interne du serveur : http://fr.wikihow.com/configurer-la-...sur-un-routeur
    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 !

  5. #5
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir à tous

    Enfin j'ai réussi à établir une connexion distante à l'aide de 'LogMeIn Hamachi'.

    figure:
    Nom : LMI.png
Affichages : 417
Taille : 16,2 Ko

    Cependant la deuxième application n'est mise à jour que lorsque la première
    est fermé, c'est à dire qu'on ne peut pas saisir les données dans les 2 applications simultanément

    en tout cas c'est un pas considérable.

    merci à tous.

  6. #6
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir à tous

    Après cette modification, le tout fonctionne bien en mode réseau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1-IBTransaction.Params:='isc_tpb_read_committed'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    2-procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet); 
      begin
      SQLQuery1.ApplyUpdates(-1);   
      IBTransaction.EndTransaction  ; // Destruction de la transaction.
      SQLQuery1.Active:=True ;          // MAJ de la transaction.
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3-Le rafraîchissement (manuel, Timer...) de SQLQuery1 (pour voir les changements sur le PC2).
    NB: afin d'assurer un bon fonctionnement, chaque SQLquery doit avoir sa propre transaction.

    Happy new year!

  7. #7
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir à tous

    NB: afin d'assurer un bon fonctionnement, chaque SQLquery doit avoir sa propre transaction.

    Sauf dans le cas des SqlQueries interdépendantes, elles doivent êtres liées à une même transaction pour être
    atomisées et par conséquent garantir la cohérence des données dans ces Datasets.

    Ex1: les SqlQueries: Maître/Détail doivent être liées à une même transaction.

    Ex2: les SqlQueries:TblVentes/TblStock (car la valeur Qte_Stk mentionnée dans TblVentes, va être retirée du TblStock).

    et il existe d'autres cas.

    merci beaucoup.

  8. #8
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour à tous

    J'ai préparé un petit exemple qui montre comment ajouter un nouvel enregistrement dans une Table 'MEMBRE' en mode réseau,
    tout en rafraîchissant systématiquement les données dans tous les PC:

    L'application et ses composants:

    figure:
    Nom : TrigImage.png
Affichages : 310
Taille : 46,9 Ko

    1/ TABLE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE MEMBRE
    (COD_MBR  INT,
     NOM_MBR  VARCHAR(20),
     ADR_MBR VARCHAR(30),
     TEL_MBR VARCHAR(15));
    2/ GENERATOR:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE GENERATOR AUTOINC;
    SET GENERATOR AUTOINC TO 0;
    3/ TRIGGER:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET TERM ^ ;
     
    CREATE TRIGGER TrigAutoInc FOR MEMBRE
    ACTIVE BEFORE INSERT POSITION 0
    AS 
    BEGIN 
    new.COD_MBR=gen_id(AUTOINC,1);
    post_event  'OK'; 
    END^
     
    SET TERM ; ^
    les codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FBEventMonitor1EventAlert(Sender: TObject; EventName: string;
      EventCount: longint; var CancelAlerts: boolean);
    begin
     if EventName='OK' then
      MEMBRE.Refresh ;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FBEventMonitor1.RegisterEvents ;
      FBEventMonitor1.Registered:=True ;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.MEMBREAfterDelete(DataSet: TDataSet);
    begin
      MEMBRE.ApplyUpdates ;
      SQLTransaction1.Commit ;
      MEMBRE.Active:=true ;
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.MEMBREAfterPost(DataSet: TDataSet);
    begin
      MEMBRE.ApplyUpdates ;
      SQLTransaction1.Commit ;
      MEMBRE.Active:=True ;
    end;
    Merci.

  9. #9
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut Perfectionnement de l'application
    Bonsoir,

    J'ai amélioré le comportement de la transaction(Type:Read Committed), pour la mise à jour conditionnée des applications clientes,

    après insertion, modification ou suppression d'un enregistrement.

    1/ TRIGGERS:

    a/ Insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET TERM ^ ;
    CREATE TRIGGER TrigAutoInc FOR MEMBRE
    ACTIVE BEFORE INSERT POSITION 0
    AS 
    BEGIN 
    new.COD_MBR=gen_id(AUTOINC,1);
    post_event  'INS'; 
    END^
    SET TERM ; ^
    b/ Modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET TERM ^ ;
    CREATE TRIGGER TrgEdt FOR MEMBRE
    ACTIVE AFTER UPDATE POSITION 1
    AS 
    BEGIN 
    post_event 'EDT';
    END^
    SET TERM ; ^
    c/ Suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET TERM ^ ;
    CREATE TRIGGER TriDel FOR MEMBRE
    ACTIVE AFTER DELETE POSITION 2
    AS 
    BEGIN 
    post_event 'DEL';
    END^
    SET TERM ; ^
    2/ Figure:
    Nom : TrigImage.png
Affichages : 363
Taille : 56,3 Ko

    3/ le code:
    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
    procedure TForm1.FBEventMonitor1EventAlert(Sender: TObject; EventName: string;
      EventCount: longint; var CancelAlerts: boolean);
    begin
      if EventName='INS' then
      if Insertion.Checked then
      MEMBRE.Refresh ;
     
       if EventName='EDT' then
      if Modification.Checked then
      MEMBRE.Refresh ;
     
       if EventName='DEL' then
      if Suppression.Checked then
      MEMBRE.Refresh ;
    end;
    Merci ***The end***

  10. #10
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut Récapitulatif de la connexion réseau (basé sur l'expérience).
    Bonsoir à tous


    I/ Etablissement et configuration du réseau distant:

    Il existe plusieurs façons d'établir une connexion distante.

    Personnellement j'utilise une VPN (Hamachi) gratuite et facilement configurable,

    une fois téléchargée et installée, on procède à créer un compte, ensuite à configurer notre

    réseau depuis le menu 'Gérer/Gérer les réseaux" et rien de plus facile!


    II/Création et configuration de l'application (valable pour tout type de connexion!):

    1/Transaction:

    Lazarus est déja orienté réseau, seulement ses transactions sont par défaut de type (SNAPSHOT),

    on les changerons en type (READ COMMITTED) pour une meilleure adaptation réseau.

    -Ajouter une seule transaction à l'application de type (READ COMMITTED) et configurer la ainsi.

    Copier isc_tpb_read_committed dans le 'Dialogue d'éditeur de chaînes' (SQLTransaction1/params).

    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SQLTransaction1.Params.Add('isc_tpb_read_committed');

    2/La sauvegarde

    a/D'un seul enregistrement d'une SQLQuery:

    Méthode abrégée et fréquente pour sauvegarder un enregistrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.SqlQuery1AfterPost(DataSet: TDataSet);
    begin
       SqlQuery1.ApplyUpdates ;
     
       SQLTransaction1.CommitRetaining;  
    end;

    b/ De plusieurs enregistrements appartenants à des SQLQueries interdépendentes:

    C'est une sauvegarde spéciale, protégée par une transaction, utilisée dans les milieux professionnels,

    particulièrement par les établissements financiers.

    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
    procedure TForm1.SauvegarderClick(Sender: TObject);
    begin
      try
      SQLQuery1.ApplyUpdates;
      SQLQuery2.ApplyUpdates;
      .
      .
      SQLQueryn.ApplyUpdates;
      SQLTransaction1.CommitRetaining;
     
      except
     
      SQLQuery1.CancelUpdates;
      SQLQuery2.CancelUpdates;
      .
      .
      SQLQueryn.CancelUpdates;
      SQLTransaction1.RollbackRetaining;
     
     <un eventuel message d''erreur>
      end;
    end;

    3/L'affichage du changement sur les autres PC:

    Par défaut ce changement n'est pas affiché sur les autres PC et ceci est important si l'on désire:

    *continuer à travailler uniquement sur l'archive, en cas d'une impression par exemple.

    Cependant si l'on désire rafraîchir les données, il suffit d'appliquer un refresh:

    -A laide d'un click.

    -A l'aide d'un timer.

    -Où la meilleure façon à l'aide d'un trigger et d'un FBEventMonitor comme est décrit précédemment.

    -0-

    merci

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

Discussions similaires

  1. [SQL2000] créer une connexion distante
    Par PeterEMF dans le forum Administration
    Réponses: 4
    Dernier message: 22/08/2011, 08h29
  2. Réponses: 6
    Dernier message: 05/05/2006, 19h11
  3. Comment créer une connexion accès distant ?
    Par fredero dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 08/06/2005, 22h31
  4. Comment etablir une connexion distante sur une bd sql server
    Par sessime dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/11/2004, 13h19
  5. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46

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