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

Bases de données Delphi Discussion :

[ODBC] [Access] Verifier si un utilisateur ecrit ou lit dans une DB


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 28
    Points
    28
    Par défaut [ODBC] [Access] Verifier si un utilisateur ecrit ou lit dans une DB
    Bonjour,

    J'aimerai, au FormCreate, faire une procédure permettant de vérifier si la base de donnée est déjà en accès exclusif par un autre utilisateur et, le cas echeant ne pas planter. J'ai regardé du coté de ODBCConnection à la propriété Connected ou KeepConnection et c'est uniquement dès qu'il arrive a mon premier SELECT que le programme plante.

    Merci de votre aide par avance !

    inc002

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    up ?


    Avez-vous besoin de plus d'explications ?

    Le principe est le suivant :

    UserA est connecté à la base via le programme à la base sur Serv1
    UserB veux se connecter à la DB via le programme.

    --> Le programme affiche "UserA déjà connecté, lecture seule de la DB"

    Est-ce possible ?

    Avez vous une piste concernant les propriétés du composant ODBC et Access?

    Merci encore

    inc002

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    lorsque une base de données Access est ouverte, il y a un fichier *.ldb qui est crée automatiquement. ce fichier renseigne sur les utilisateurs connectés à la base de données. ceci est la première piste pour arriver à une solution.
    pour ce qui est de la deuxième solution, tu peux facilement tester si quelqu'un est déjà connecté à la base de données, dépendamment des droits d'ouverture qu'il a utilisé et des droits que tu souhaite obtenir sur la base. des sujets similaires ont déjà étés abordés sur le forum il me semble bien.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup


    J'ai trouvé ce code permettant d'extraire le nom des users utilisant la DB sur le forum et codé par Hauwke

    ici

    Le voici
    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
    uses 
      Classes, SysUtils; 
     
    procedure ReadLoggedUsers(const MDBFile:string; ExtractUsers:boolean; 
      List:TStrings); 
    type 
      TChar32 = array[0..31] of char; 
      LDBRecord = record 
        Workstation : TChar32; 
        User : TChar32; 
      end; 
    var 
      Stm : TFileStream; 
      s : string; 
      rec : LDBRecord; 
      i : integer; 
     
      function Char32ToString(arr:TChar32) : string; 
      var 
        i : integer; 
      begin 
        SetLength(result, 32); 
        Move(arr, result[1], 32); 
        result := Trim(result); 
      end; 
     
    begin 
      if List<>nil then begin 
        List.Clear; 
        s := ChangeFileExt(MDBFile, '.ldb'); 
        if FileExists(s) then begin 
          stm := TFileStream.Create(s, fmOpenRead+fmShareDenyNone); 
          try 
            while stm.Position < stm.Size do begin 
              stm.Read(rec, SizeOf(rec)); 
              if ExtractUsers 
                then s := Char32ToString(rec.User) 
                else s := Char32ToString(rec.WorkStation); 
              List.Add(s); 
            end; 
          finally 
            stm.Free; 
          end; 
        end; 
      end; 
    end;
    et merci encore pour votre contribution et ce que vous faites tous

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2015, 15h34
  2. Réponses: 0
    Dernier message: 28/07/2013, 17h13
  3. Réponses: 5
    Dernier message: 21/06/2012, 21h28
  4. [AC-2000] Récupérer NOM Utilisateur pour l'écrire dans une table
    Par goupil14 dans le forum Sécurité
    Réponses: 3
    Dernier message: 17/01/2010, 20h31
  5. Réponses: 3
    Dernier message: 31/01/2005, 23h24

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