[Base] Déconnecter la session active à un serveur distant

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
nc1862
Fraîchement OOthentifié
Messages : 7
Inscription : 06 janv. 2015 10:20

[Base] Déconnecter la session active à un serveur distant

Message par nc1862 »

Bonjour,

Je travaille sur une application sur LibO Base attaquant une base de données PostGreSQL hébergé sur un serveur. Je souhaitais masquer l'interface LibO sous les formulaires de l'application afin que les utilisateurs ne puissent pas accéder aux dessous de la base en fermant ceux-ci.

Grâce au forum, j'ai découvert comment faire et comment gérer la fermeture de LibO après la fermeture du formulaire faisant office de Menu de l'application.

Cependant, je me retrouve avec un nouveau problème. En effet, LibO se ferme correctement, mais à la ré-ouverture de la base de données, l'authentification à la base PostGreSQL ne m'est plus demandée.

Donc la connexion à la base restant active malgré la fermeture de LibO, à l'ouverture suivante et si l'utilisateur n'active pas les macros, il a à nouveau accès aux dessous de la base, et je reviens à mon problème de départ.

https://forum.openoffice.org/fr/forum/v ... =9&t=45987

Est-ce que l'un d'entre-vous aurait déjà eu à gérer ce type problème ?
Dernière modification par nc1862 le 13 janv. 2015 15:06, modifié 2 fois.
Microsoft Windows sept Professional 64 bits
Libre Office 4.1.6.2
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] Déconnecter la session active à un serveur distan

Message par Piaf »

Bonjour
Comment est déclarée ta connexion ?
as tu essayé ?

Code : Tout sélectionner

Sub RA_Fermer_Base(oEv as Object)
Dim oDatabase as Object,oMenu as Object
   oDatabase = oEv.source
   oMenu = oDatabase.getFormDocuments.getByName("accueil")
   If isNull(oMenu.getComponent() ) Then
REM maConnexion.close
REM maConnexion.dispose
      ThisDatabaseDocument.close(True)
   End If
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
nc1862
Fraîchement OOthentifié
Messages : 7
Inscription : 06 janv. 2015 10:20

Re: [Base] Déconnecter la session active à un serveur distan

Message par nc1862 »

Bonjour Piaf,

En fait, je ne sais pas comment déclarer la connexion à ma base dans une macro.

Dans LibO, elle est déclarée de cette manière :

Edition/Base de données/Type de connexion/Type de base de données : PostgreSQL
Edition/Base de données/Propriétés/URL de la source de données : host=rlr-app2 dbname=rce

Comment puis-je couper cette connexion (client/serveur) avant de fermer mon document Base ?
Microsoft Windows sept Professional 64 bits
Libre Office 4.1.6.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26009
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Déconnecter la session active à un serveur distan

Message par Dude »

Salut,
nc1862 a écrit :En fait, je ne sais pas comment déclarer la connexion à ma base dans une macro.
Donc le titre ne reflète pas le problème exprimé.
A modifier pour [Base] Connexion et authentification PostGreSQL

Suivant le pilote déclaré (JDBC, ODBC), il faut partir d'un contexte et déclarer une source.
Le passage de l'identifiant et du mot de passe se fait par la propriété GetConnection.
Lire la documentation concernée : http://www.openoffice.org/api/docs/comm ... ource.html
nc1862
Fraîchement OOthentifié
Messages : 7
Inscription : 06 janv. 2015 10:20

Re: [Base] Déconnecter la session active à un serveur distan

Message par nc1862 »

Bonjour,

Je reprends l'explication de mon problème en le reformulant.

Mon application utilise l'interface Base de Libre Office avec une base (PostGres SQL) hébergée sur un serveur distant. La base est déclarée dans LibO de la façon suivante :

Edition/Base de données/Type de connexion/Type de base de données : PostgreSQL
Edition/Base de données/Propriétés/URL de la source de données : host=rlr-app2 dbname=rce

L'application s'ouvre après entrée d'un mot de passe, sur un menu général lancé par la macro suivante :

Code : Tout sélectionner

Sub DemarragePleinEcranAccueil

dim document   as object
dim dispatcher as object
dim LibOForm as object

dim args1(0) as new com.sun.star.beans.PropertyValue

ThisDatabaseDocument.CurrentController.connect("","")
LibOForm =ThisDatabaseDocument.FormDocuments.getByName("accueil").open

document   = LibOForm.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

args1(0).Name = "FullScreen"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:FullScreen", "", 0, args1())

End Sub 
Jusque là tout va bien. Sur ce menu, un bouton Fermer permet de fermer l'application après emploi. La macro liée à ce bouton est la suivante :

Code : Tout sélectionner

Sub QuitterMaBase

	Dim MaBase As Object
	MaBase = ThisDataBaseDocument
	
If MaBase.ismodified Then
	MaBase.store
End If
	MaBase.close(True)
	MaBase.dispose
End sub
Lorsque l'on appuie sur le bouton, l'application se ferme ainsi que Libre Office.

Mon problème se situe ensuite. Si l'on décide de relancer l'application, le mot de passe n'est plus demandé, ce qui laisse à supposer que la connexion à la base n'a pas été correctement fermé. Par ailleurs, on peut constater dans le gestionnaire des tâches (Windows 7 Pro 64 bits) qu'un processus soffice est encore actif après la fermeture de la base de la manière indiquée ci-dessus.

Pouvez-vous me dire ce qui cloche dans ma façon de procéder ?

Merci par avance.
Microsoft Windows sept Professional 64 bits
Libre Office 4.1.6.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26009
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Déconnecter la session active à un serveur distan

Message par Dude »

nc1862 a écrit :Pouvez-vous me dire ce qui cloche dans ma façon de procéder ?
Ce qui cloche ? Mise à part que tu ne tiens pas compte des réponses que l'on te donne ?
Dans tes scripts DemarragePleinEcranAccueil et QuitterMaBase, où se trouve la procédure de connexion et de déconnexion ?
Relis ce que te donne Piaf et moi-même.

Eventuellement, regarde notre grand classique du suprême de code qui montre ce procédé.
nc1862
Fraîchement OOthentifié
Messages : 7
Inscription : 06 janv. 2015 10:20

Re: [Base] Déconnecter la session active à un serveur distan

Message par nc1862 »

Bonjour,

J'ai essayé de m'inspirer du message de Piaf. Dans ma procédure d'ouverture, la connexion est réalisé avec la ligne ' ThisDatabaseDocument.CurrentController.connect("","") '

Code : Tout sélectionner

Sub DemarragePleinEcranAccueil

dim MaConnexion as object
dim document   as object
dim dispatcher as object
dim LibOForm as object

dim args1(0) as new com.sun.star.beans.PropertyValue

ThisDatabaseDocument.CurrentController.connect("","")
MaConnexion = ThisDatabasedocument.CurrentController.ActiveConnection

LibOForm =ThisDatabaseDocument.FormDocuments.getByName("accueil").open

document   = LibOForm.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

args1(0).Name = "FullScreen"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:FullScreen", "", 0, args1())

End Sub 
A la fermeture, j'utilise .close et .dispose pour fermer cette connexion. En utilisant l'outil XRay, on s'aperçoit que la connexion disparaît après avoir utilisé .close (ça semble logique). Cependant en ré-ouvrant mon application, le mot de passe à la base PostGres ne m'est plus demandé.

Code : Tout sélectionner

Sub QuitterMaBase

	MaBase = ThisDataBaseDocument
	MaConnexion = MaBase.CurrentController.ActiveConnection

	If MaBase.ismodified Then
		MaBase.store
	End If

	xray(MaConnexion)
	MaConnexion.close
	xray(MaConnexion)
	MaConnexion.dispose
	xray(MaConnexion)

	MaBase.close(True)
	MaBase.dispose
	
End sub
Est-ce que je dois déclarer une source et un contexte comme le suggère Dude, alors que l'application fonctionne correctement (hormis ce problème de fermeture) ?
Microsoft Windows sept Professional 64 bits
Libre Office 4.1.6.2