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 :

Enregistrement vérouillé sur paradox


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Par défaut [RESOLU] Enregistrement vérouillé sur paradox
    Comment verrouillé l'accés à un enregistrement d'une table Paradox si celui ci est déjà en modification par un autre utilisateur

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Pour ma part je mettais en place avec Paradox la technique suivante.

    Création d'un table des LOCKS :
    1) LOCK_ID : [varchar] clé pirmaire;
    2) LOCK_USER : [varchar] <- ID le l'utilisateur
    3) LOCK_APPLI : [varchar] <- Dans le cas où la base peut être attaquée par plusieurs appli
    4) LOCK_VALUE : [int]

    Dès qu'un utilisateur Authentifié (Gérer une tables tables utilisateurs avec leurs droits) se connecte à un enregistrement d'une table alors instruire la table des LOCKS de la façon suivante :
    LOCK_ID prend la valeur suivante :
    Nom_de_la_table + '_' + valeur( clé_primaire de l'enregistrement sur lequel l'user est connecté)
    LOCK_USER prend la valeur de l'ID utilisateur authentifié etc...

    A la lecture de la table on retrouve quel utilisateur est connecté et à quels enregistrements... Cela permet ainsi de bloquer les modifications de certains enregistrements.

    Bien entendu, il faut supprimer une entrée de la table des LOCKS dès qu'un utilisateur se deconnecte ou qu'il cloture sa connexion à un enregistrement.

    Attention cependant, lors d'un plantage, il faut penser à supprimer les entrèes de la tables des LOCKS qui ne seraient plus en cours....

    En espérant que cela réponde à vos attentes

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Par défaut
    Si je comprends bien

    tu me dire de créer une table LOCK ou on enregistre l'enregistrement qui est utilisé et par qui.

    Si un autre utilisateur veut ouvrir un enregistrement; on vérifie dans la tabe LOCK si l'enregistrement est vérouillé ou pas

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Exactement

    Et en plus lors de l'ouverture par un autre utilisateur de l'enregistrement locké, tu peux alors indiquer à cet utilisateur qui est en modification sur cet enregistrement.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Par défaut
    ok merci je vais essayer ta possibilité

  6. #6
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut

    Mais c'est déjà intégré dans Paradox... Si tu essayes de modifier un enregistrement déjà en cours de modification par un autre utilisateur, tu as une exception.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    C'est automatique par le fait que si tu fais Edit ( avec la méthode, un DBNavigator ou une modification directe sur la ligne ), l'enregistrement est alors vérouillé par le BDE jusqu'au Post/Cancel/Changement d'enregistrement en cours.

    Dans le cas ou une ligne est en cours de modif sur un poste ( ou un programme ), si un autre programme essaye de modifier la même ligne il y a une exception "L'enregistrement en cours en vérrouillé par une autre utilisateur"
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Par défaut
    MAis alors comment récupérer le fait qu'il soit verrouillé

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Par défaut
    Utilises les transactions. Si ta transaction échoue, dans un bloc TRY EXCEPT tu relances l'opération ou tu annules

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Par défaut
    Bonjour,

    A mon tour de mettre mon grain de sel ou d'apporter une contribution c'est selon...
    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
     
    Function Flock(Table:TTable;Mode:TlockType):Boolean;
    Var Cod_ret:Boolean;
        i,j:Integer;
        Mess :String;
    Begin
    If not Table.Active Then Table.Active := True;
    j:=0;
    Cod_ret := False;
    While j<5 Do
      Begin
      Try
      Table.LockTable(Mode);
      Cod_ret := True;
      Break;
      Except on E:EdbEngineError Do
        Begin
        Cod_ret := False;
        I:=0;
        Mess := '';
        While I<E.ErrorCount Do
          Begin
          If (E.Errors[i].ErrorCode=10243) Or (E.Errors[i].ErrorCode=10245)
             Then Mess := Mess+E.Errors[i].Message+chr(13);
          inc(i)
          End; // Enddo  I
        If length(Mess)>0
           Then Showmessage('Code 10243/10245 '+Mess);
        If MessageDlg('La Table '+Table.TableName +' est occupée par un autre utilisateur '+chr(13)
                   +'Voulez-vous refaire un essai ',MtWarning,[MbYes,MbNo],0)=MrNo
           Then Break;
        Inc(j);
        If j=5
           Then Begin
           MessageDlg('Refaites un essai plus Tard ',MtWarning,[Mbok],0);
           Break;
           End;
        End; // Except
        End;
        If Cod_ret Then Break;
    End; // While
    Result := Cod_ret;
    End; // procedure
    Utilise cette fonction que j'ai bidouillé.
    Le problème est que Sous W2K, l'os ne gére pas bien les locks.
    Aussi , je suis en train de migrer ver Interbase à cause de celà.
    Tiens moi au courant!

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Par défaut
    Merci pour tout.

    Mais c'est vrai que lorsque je fais un edit, il sufffit de récupére l'erreur et de la mettre dans un try except. Ca marhce bien. Cela dit je garde la derniére version qui peut être intéressante

    Merci encore

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

Discussions similaires

  1. Applet, ouvrir la fenetre "Enregistrer sous" sur u
    Par HopeLeaves dans le forum Applets
    Réponses: 4
    Dernier message: 26/04/2011, 11h38
  2. Réponses: 13
    Dernier message: 19/12/2005, 19h19
  3. enregistrer image sur disque avec URL
    Par meufeu dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2005, 12h55
  4. Enregistrement vérouillé
    Par Ethmane dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/10/2005, 00h48
  5. Je suis à l'enregistrement X sur Y
    Par elias dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 14h38

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