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 :

fDbiIsTableLocked - Connaitre le nombre de verrous en multi-sessions


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut fDbiIsTableLocked - Connaitre le nombre de verrous en multi-sessions
    Bonjour,

    Dans mon application j'aimerais savoir le nombre de verrous posés sur une table donnée j'ai ce code depuis le BDE.HLP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function fDbiIsTableLocked(Tbl: TTable; Lock: DBILockType): Word;
    var
      NumLocks: Word;
    begin
      Check(DbiIsTableLocked(Tbl.Handle, Lock, NumLocks));
      Result:= NumLocks;
    end;
    Mais il n'est valable que pour une seule session comme l'explique l'aide du BDE

    Returns the number of locks of a specified type acquired on the table associated with the given session.
    Et le problème est que mon application gère plusieurs session.

    En posant un verrou sur une table dans une autre session juste pour un petit test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table.lock(ltWriteLock);
    Et lorsque je test pour obtenir le nombre de vérrous dans une session différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LockTotal:= fDbiIsTableLocked(Table1, dbiWRITELOCK);
    j'ai le message suivant :
    Invalid handle to the function
    Je n'ai pas trouver comment tester cela dans un environnement mutli-session.

    Si quelqu'un saurait comment faire ?

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    As-tu essayé avec fDbiOpenLockList pour voir si tu récupères les verrous quelque soit la session?

    Tu as un exemple dans BDE32.hlp.

    @+ Claudius

  3. #3
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    non je ne l'ai pas fait, je ne connaisssait pas cette fonction...
    je l'essayerais ce soir je n'ai pas le code ici
    Merci Cl@udius

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    super ! ca marche bien
    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
     
    var
      TmpCursor: hdbicur;
      Lock: LOCKDesc;
      rslt: dbiResult;
    begin
      Check(DbiOpenLockList(Tbl.handle, True, True, TmpCursor));
      Check(DbiSetToBegin(TmpCursor));
     
      LockList.Clear;
      repeat
        rslt:= DbiGetNextRecord(TmpCursor, dbiNOLOCK, @Lock, nil);
        if (rslt <> DBIERR_EOF) then begin
          LockList.Add('Lock Type: ' + IntToStr(Lock.iType));
          LockList.Add('User Name: ' + StrPas(Lock.szUserName));
          LockList.Add('Net Session: ' + IntToStr (Lock.iNetSession));
     
          LockList.Add('Session: ' + IntToStr (Lock.iSession));
          LockList.Add('Record Number: ' + IntToStr (Lock.iRecNum));
        end;
      until (rslt <> DBIERR_NONE);
      Check(DbiCloseCursor(TmpCursor));
    end;
    et l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fDbiOpenLockList(Table1, LockList);
    A la 1ere ouverture de la table ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Lock Type: 4
    User Name: Administrateur
    Net Session: 17
    Session: 3
    Record Number: 0
    A le 2eme ouverture de la table ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Lock Type: 4
    User Name: Administrateur
    Net Session: 17
    Session: 3
    Record Number: 0
     
    Lock Type: 6
    User Name: Administrateur
    Net Session: 18
    Session: 0
    Record Number: 0
    La seule chose que je n'ai pas comprise est l'incrémentation du Net Session
    même lorsque je ferme et réouvre la 2eme application ca s'incremente dans l'aide ont dit :
    Specifies le net level session number
    mais pas compris, mais bon ... l'important est que ca me renvoi le nombre de session ouverte sur la table.

    Merci Cl@udius

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

Discussions similaires

  1. Connaitre le nombre de lignes imprimees
    Par Gremlins13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 12/01/2006, 18h31
  2. Connaitre le nombre de lignes imprimees
    Par Gremlins13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/01/2005, 14h38
  3. Connaitre le nombre de caractère ";" dans un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/11/2004, 17h36
  4. [VB.NET] Connaitre le nombre d'éléments sélectionnés
    Par stephtbest dans le forum ASP.NET
    Réponses: 7
    Dernier message: 16/02/2004, 14h52
  5. comment connaitre le nombre ...
    Par mythtvtalk.com dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/08/2003, 08h18

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