Atteindre de verrouillage d'enregistrement avec access 2000
Comment puis-je mettre en œuvre de verrouillage d'enregistrement sur une base de données Access 2000 à l'aide de Delphi?
Avez-vous vu cela sur Support de Borland?
Région: base de données\ado
Numéro de Référence: 74076
Statut: Ouvert
Date: 11/3/99
Gravité: Couramment Rencontrés
Type: Fonctionnalités de Base de l'Échec
le Problème:
Actuellement, pessimiste record de verrouillage ne fonctionne pas
avec les composants ADO parce que l'ADO n'est pas
fournir un moyen de verrouiller un enregistrement autre que le
enregistrement en cours.
il y a Bien une façon de verrouiller les enregistrements sur MSAccess 2000 tables.
d'Abord il exige que vous ayez les développeurs, édition de
Microsoft Ado Data Control 6.0 (livré avec les programmes de Visual Studio).
Si vous avez que de l'Importer ensuite à delphes à l'aide de l'Importation ActiveX
l'élément de menu à partir du menu Composant. Vous verrez que les ActiveX a
été ajouté comme Adodc sur l'ActiveX palette.
Créer un Formulaire et de mettre autant de Adodc composants sur elle comme vous l'aurez besoin
verrous simultanés. Rappelez-vous ceci: Un Adodc pouvez verrouiller Un enregistrement dans Une table
à l'heure. Donc, si vous avez besoin de verrouiller plusieurs dossiers sur plusieurs tables, vous
besoin de plusieurs Adodc composants (vous avez le choix de la dynamique de création de trop).
Ensuite créer une nouvelle table dans Access MDB et le nom, il permet de dire 'Lock'. Mettre deux
champs ('lockid' de type String et 'fldEdt' de type entier).
ci-Dessous sont deux Fonctions. L'un appelé Verrou, que vous pouvez utiliser pour
verrouiller l'enregistrement, ou vérifier si il est verrouillé. L'autre est appelé Déverrouiller
et vous pouvez l'utiliser pour déverrouiller le disque.
fonction de verrouillage(ds:TAdoConnection LckTable:TAdodc const s:string
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp rec,CurrentUserId:longint):boolean
var
& nbsp & nbsp fnd:boolean
& nbsp & nbsp s1:chaîne de caractères
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp LckTable.ConnectionString:=ds.ConnectionString
& nbsp & nbsp LckTable.CursorLocation:=2
& nbsp & nbsp LckTable.LockType:=2
& nbsp & nbsp LckTable.CommandType:=2
& nbsp & nbsp LckTable.RecordSource= 'Verrouiller'
& nbsp & nbsp fd:=false
& nbsp & nbsp Essayer
& ! & ! & ! & nbsp LckTable.actualiser
& ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.RecordCount>0, alors
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.MoveFirst
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Find('lockid='' s1 '',0,1,1)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.RecordCount>0, alors
& ! & ! & ! & nbsp si ce n' (LckTable.Jeu d'enregistrements.EOF)
& ! & ! & ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.Champs['lockid'].valeur=s1
& ! & ! & ! & ! & ! & ! & ! & nbsp fd:=true
& ! & ! & ! & ! & ! & nbsp si pas chercher puis
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.AddNew('lockid',s1)
& ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Champs['fldEdt'].Valeur:=CurrentUserId
& ! & ! & ! & ! & ! & nbsp result:=true
& nbsp & nbsp à l'exception de
& ! & ! & ! & nbsp result:=false
& nbsp & nbsp fin
fin
fonction de Déverrouillage(const s:string rec:longint LckTable:TAdodc):boolean
var
& nbsp & nbsp s1:string
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp essayer
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Annuler
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Find('lockid='' s1 '',0,1,0)
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Supprimer(1)
& ! & ! & ! & nbsp result:=true
& nbsp & nbsp à l'exception de
& ! & ! & ! & nbsp result:=false
& nbsp & nbsp fin
Maintenant, vous avez à faire un peu de codage à l'intérieur de votre projet.
Lors de permet de dire qu'un utilisateur demande à ouvrir un dossier (qui permet de dire avec l'id unique 12)
à partir de votre Client de la table. Vous avez un Tadodc qui est appelé lckCustomers et est
situé sur la forme dite lckForm. Utilisez ce code:
si le Verrouillage(TCustomer.Connexion,lckForm.lckCustomers, 'Clients', 12,1) puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp // le dossier a été correctement verrouillé et vous pouvez aller sur avec votre
& ! & ! & ! & nbsp // l'édition de code
& ! & ! & ! & nbsp // ...
& nbsp & nbsp fin
else
& nbsp & nbsp commencer
& ! & ! & nbsp & nbsp // Ther record est déjà verrouillé par un autre utilisateur.
& ! & ! & ! & nbsp // donner un message et abandonner l'édition, ou de continuer en lecture seule.
& ! & ! & ! & nbsp // ...
& nbsp & nbsp fin
Maintenant, si vous voulez débloquer le dossier, après l'édition appelez simplement:
Déverrouiller (les 'Clients', 12,lckForm.lckCustomers)
Attention: Le Verrouillage de la table est très grande, donc lors de la première connexion de l'utilisateur
le programme, vide de la table de verrouillage en utilisant une requête comme 'supprimer de lock'.
Vous pouvez vérifier si vous êtes le premier utilisateur en vérifiant l'existence d'un ldb
le fichier suivant dans votre fichier mdb. S'il n'existe pas, vous êtes le premier.
c'est à ce sujet. Bonne chance.
Atteindre de verrouillage d'enregistrement avec access 2000
Atteindre de verrouillage d'enregistrement avec access 2000 : Plusieurs milliers de conseils pour vous faciliter la vie.
Comment puis-je mettre en œuvre de verrouillage d'enregistrement sur une base de donnees Access 2000 a l'aide de Delphi?
Avez-vous vu cela sur Support de Borland?
Region: base de donnees\ado
Numero de Reference: 74076
Statut: Ouvert
Date: 11/3/99
Gravite: Couramment Rencontres
Type: Fonctionnalites de Base de l'Echec
le Probleme:
Actuellement, pessimiste record de verrouillage ne fonctionne pas
avec les composants ADO parce que l'ADO n'est pas
fournir un moyen de verrouiller un enregistrement autre que le
enregistrement en cours.
il y a Bien une façon de verrouiller les enregistrements sur MSAccess 2000 tables.
d'Abord il exige que vous ayez les developpeurs, edition de
Microsoft Ado Data Control 6.0 (livre avec les programmes de Visual Studio).
Si vous avez que de l'Importer ensuite a delphes a l'aide de l'Importation ActiveX
l'element de menu a partir du menu Composant. Vous verrez que les ActiveX a
ete ajoute comme Adodc sur l'ActiveX palette.
Creer un Formulaire et de mettre autant de Adodc composants sur elle comme vous l'aurez besoin
verrous simultanes. Rappelez-vous ceci: Un Adodc pouvez verrouiller Un enregistrement dans Une table
a l'heure. Donc, si vous avez besoin de verrouiller plusieurs dossiers sur plusieurs tables, vous
besoin de plusieurs Adodc composants (vous avez le choix de la dynamique de creation de trop).
Ensuite creer une nouvelle table dans Access MDB et le nom, il permet de dire 'Lock'. Mettre deux
champs ('lockid' de type String et 'fldEdt' de type entier).
ci-Dessous sont deux Fonctions. L'un appele Verrou, que vous pouvez utiliser pour
verrouiller l'enregistrement, ou verifier si il est verrouille. L'autre est appele Deverrouiller
et vous pouvez l'utiliser pour deverrouiller le disque.
fonction de verrouillage(ds:TAdoConnection LckTable:TAdodc const s:string
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp rec,CurrentUserId:longint):boolean
var
& nbsp & nbsp fnd:boolean
& nbsp & nbsp s1:chaîne de caracteres
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp LckTable.ConnectionString:=ds.ConnectionString
& nbsp & nbsp LckTable.CursorLocation:=2
& nbsp & nbsp LckTable.LockType:=2
& nbsp & nbsp LckTable.CommandType:=2
& nbsp & nbsp LckTable.RecordSource= 'Verrouiller'
& nbsp & nbsp fd:=false
& nbsp & nbsp Essayer
& ! & ! & ! & nbsp LckTable.actualiser
& ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.RecordCount>0, alors
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.MoveFirst
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Find('lockid='' s1 '',0,1,1)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.RecordCount>0, alors
& ! & ! & ! & nbsp si ce n' (LckTable.Jeu d'enregistrements.EOF)
& ! & ! & ! & ! & ! & nbsp si LckTable.Jeu d'enregistrements.Champs['lockid'].valeur=s1
& ! & ! & ! & ! & ! & ! & ! & nbsp fd:=true
& ! & ! & ! & ! & ! & nbsp si pas chercher puis
& ! & ! & ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.AddNew('lockid',s1)
& ! & ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Champs['fldEdt'].Valeur:=CurrentUserId
& ! & ! & ! & ! & ! & nbsp result:=true
& nbsp & nbsp a l'exception de
& ! & ! & ! & nbsp result:=false
& nbsp & nbsp fin
fin
fonction de Deverrouillage(const s:string rec:longint LckTable:TAdodc):boolean
var
& nbsp & nbsp s1:string
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp essayer
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Annuler
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Find('lockid='' s1 '',0,1,0)
& ! & ! & ! & ! & nbsp LckTable.Jeu d'enregistrements.Supprimer(1)
& ! & ! & ! & nbsp result:=true
& nbsp & nbsp a l'exception de
& ! & ! & ! & nbsp result:=false
& nbsp & nbsp fin
Maintenant, vous avez a faire un peu de codage a l'interieur de votre projet.
Lors de permet de dire qu'un utilisateur demande a ouvrir un dossier (qui permet de dire avec l'id unique 12)
a partir de votre Client de la table. Vous avez un Tadodc qui est appele lckCustomers et est
situe sur la forme dite lckForm. Utilisez ce code:
si le Verrouillage(TCustomer.Connexion,lckForm.lckCustomers, 'Clients', 12,1) puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp // le dossier a ete correctement verrouille et vous pouvez aller sur avec votre
& ! & ! & ! & nbsp // l'edition de code
& ! & ! & ! & nbsp // ...
& nbsp & nbsp fin
else
& nbsp & nbsp commencer
& ! & ! & nbsp & nbsp // Ther record est deja verrouille par un autre utilisateur.
& ! & ! & ! & nbsp // donner un message et abandonner l'edition, ou de continuer en lecture seule.
& ! & ! & ! & nbsp // ...
& nbsp & nbsp fin
Maintenant, si vous voulez debloquer le dossier, apres l'edition appelez simplement:
Deverrouiller (les 'Clients', 12,lckForm.lckCustomers)
Attention: Le Verrouillage de la table est tres grande, donc lors de la premiere connexion de l'utilisateur
le programme, vide de la table de verrouillage en utilisant une requete comme 'supprimer de lock'.
Vous pouvez verifier si vous etes le premier utilisateur en verifiant l'existence d'un ldb
le fichier suivant dans votre fichier mdb. S'il n'existe pas, vous etes le premier.
c'est a ce sujet. Bonne chance.
Atteindre de verrouillage d'enregistrement avec access 2000
By commentfaire
Atteindre de verrouillage d'enregistrement avec access 2000 : Plusieurs milliers de conseils pour vous faciliter la vie.