Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Débuter
Débuter Forum d'entraide pour débuter avec Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2004, 17h51   #1
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
Par défaut [FB] Empêcher la connection de deux utilisateurs identiques

Bonjour,

J'ai réaliser une application mutli-utilisateurs et multi-postes. Je souhaiterais de toute connection à la base de données requiert un utilisateur non déjà connecté.

Je crois qu'un exemple évitera de long discours plus ou moins compréhensibles ( )

Soient trois PC : A, B et C.
et 3 utilisateurs différents (pseudo+password) : 1,2 et 3.

Supposons maintenant que 1 se connecte sur A et 2 sur B.
Je souhaiterai alors que toute personne sur C ne puisse utiliser les pseudo 1 ou 2 pour se connecté (normale car déjà en ligne).

Comment attribuer un accès unique par pseudo/password à la base de donnée ?

merci,

[Edit]PS : je suis encore débutant dans FireBird ... mais je progresse [/Edit]
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2004, 18h05   #2
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Moi, j'ai bidouillé comme ceci .
J'ai utilisé une Table UTILISATEUR et quand je me logue, j'insere une ligne avec les infos NOM, DATE_CONNECT, HEURE_CONNECT. Une fois que je quitte, j'efface la ligne.
Ce qui est chiant c'est que si l'appli client se plante, la ligne reste. Donc, a partir de la DATE_CONNECT et HEURE_CONNECT, je verifie si c'etais du à une panne ou non.

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2004, 18h14   #3
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
merci pour cette réponse si rapide

J'avais pensé à quelque chose comme cela, mais il y a un problème :
Le logiciel doit fonctionner sur plusieurs parc informatique allant de 3 PC à 10 PC sans administrateurs.
Or les (futurs) clients sont loin d'être des pros et leurs PC ont la facheuse tendance à planter. N'arrivant pas à les convaincre de réinstaller Windows, et sachant qu'un utilisateur peut se connecter plusieurs fois par jour et d'une durée très variable, je cherche une solution un peu plus fiable.

Je me demandais éventuellement s'il était possible de retourner tous les utilisateurs en ligne (puisque je crois qu'il est possible de renvoyer le nombre de connecté). Comme cela, l'utilisateur se verra attribuer la connection s'il n'est pas présent dans la liste.

Je garde ta solution en réserve mais je souhaiterais quelque chose plus adapté aux besoins.

merci
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2004, 18h23   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Citation:
Envoyé par Andry
Moi, j'ai bidouillé comme ceci .
J'ai utilisé une Table UTILISATEUR et quand je me logue, j'insere une ligne avec les infos NOM, DATE_CONNECT, HEURE_CONNECT. Une fois que je quitte, j'efface la ligne.
Ce qui est chiant c'est que si l'appli client se plante, la ligne reste. Donc, a partir de la DATE_CONNECT et HEURE_CONNECT, je verifie si c'etais du à une panne ou non.

A+
Dans son cas il peut compléter sa table avec l'ID du poste (l'IP si c'est un reseau avec IP fixe par exemple).

Lors de le connexion on verifie que l'utilisateur n'existe pas dans la table, s'il existe on regarde l'ID du poste si c'est le même alors on update date_connect, heure_connect sinon on refuse le connexion.
Lors de la deconnexion on efface la ligne de l'utilisateur.

Ainsi on empèche la multiconnexion à partir de plusieurs postes.
En cas de plantage, il faut que l'utilisateur se reconnecte en utilisant le même poste pour ne pas être bloquer (ou ajouter un traitement de verification de date/heure comme a du faire ANDRY)

Voilà mais sinon il me semble qu'on peut récuppérer la liste des USER connectés, faudrait que je regarde.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2004, 18h39   #5
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
L'idée est intéressante
merci,

Je vais tenter une recherche tout de même sur la liste des USERS connectés (mais étant débutant...).
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2004, 10h25   #6
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
TIBDatabaseInfo de la palette Interbase (Delphi ou BC++)
A une propriété UserNames qui est une TStringList contenant la liste des utilisateurs connectés à la base.

Extrait de la doc Delphi :
Code :
1
2
3
4
5
6
7
var
  I: Integer;
begin
 WITH IBDatabaseInfo1 do
  begin
    FOR I := 0 TO UserNames.Count - 1 do
      Memo1.LINES.ADD(UserNames[I]);
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2004, 14h45   #7
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
Super merci

Je n'aurais jamais pensé que cela soit aussi simple
Je tente cela et je vous tiens au courant.

encore merci !
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2004, 17h27   #8
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
Cela marche à la perfection :
Code :
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
 
var
  suser, spass : string;
  nbConnection, i : integer;
 
....
  nbConnection := 0;
  // saisie du pseudo et mot de passe
  suser := InputBox('user','','');
  spass := InputBox('pass','','');
 
  // connection
  WITH DM.IBDB do
  begin
    Params.Clear;
    Params.ADD('user_name='+suser);
    Params.ADD('password='+spass);
    Params.ADD('lc_ctype=ISO8859_1');
    Connected := True;
    // il est nécessaire d'ouvrir la BD pour vérifier les connections
  end;
 
  // vérification du nombre de connection de l'utilisateur suser
  WITH DM.IBDatabaseInfo1 do
  FOR i := 0 TO UserNames.Count-1 do
  begin
    IF SameText(suser,UserNames[i]) then
      Inc(nbConnection);
  end;
 
  IF (nbConnection > 1) then begin // si plus d'une connection
    ShowMessage('déjà connecté');
    // traitement en cas d'utilisateur déjà présent.
    Exit; 
  end;
Un seul bémol, faire attention aux nombres de connection demandé par le logiciel et modifier en conséquent.

Barbibulle,

a bientot,
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h56.


 
 
 
 
Partenaires

Hébergement Web