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:
merci d'avance.
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:
merci d'avance.
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é).
Bonjour
Comment dois-je reconfigurer le serveur?
et lui attribuer probablement un numéro de port?
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
Bonsoir à tous
Enfin j'ai réussi à établir une connexion distante à l'aide de 'LogMeIn Hamachi'.
figure:
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.
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;NB: afin d'assurer un bon fonctionnement, chaque SQLquery doit avoir sa propre transaction.
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).
Happy new year!
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.
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:
1/ TABLE:
2/ GENERATOR:
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));
3/ TRIGGER:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CREATE GENERATOR AUTOINC; SET GENERATOR AUTOINC TO 0;
les codes:
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 ; ^
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;
Merci.
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;
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
b/ Modification
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 ; ^
c/ Suppression
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 ; ^
2/ Figure:
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 ; ^
3/ le code:
Merci ***The end***
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;
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager