ACEDAO supporte-t-il le verrouillage de niveau de rangée?
il y avait un problème avec DAO 3.6 en ce qu'il ne supportait pas le verrouillage de niveau de rangée. Pour plus de détails, voir cette base de connaissances article.
j'ai appris de la le blog de L'équipe D'accès :
Dans Office Access 2007, de nouveaux objets, propriétés et méthodes seront ajoutées à DAO pour soutenir les nouvelles fonctionnalités dans l'Accès au moteur de base de données.
de en regardant cette bibliothèque dans le Visual Basic Editor's Object Browser D'Access2007 que la nouvelle incarnation s'appelle ACEDAO. Je peux trouver mention d'acedao.dll dans correctifs sur MSDN mais rien d'autre.
est-ce que quelqu'un sait où se trouve la documentation de L'utilisateur final pour ACEDAO?
Comment puis-je savoir si ACEDAO prend en charge le verrouillage de ligne?
2 réponses
Je ne crois pas qu'il y ait eu de changement dans cet article de base de connaissances. Cependant, vous devez garder à l'esprit comment le verrouillage des dossiers a été mis en œuvre.
rappelez-vous que lorsque n'importe quelle table par n'importe quel utilisateur sur le réseau est ouverte, et ils ont le verrouillage de ligne activé, alors il n'aura pas d'importance comment DAO/ADO/ACE ouvre cette table dans le code.
tout utilisateur existant muni d'un verrouillage de ligne forcera le verrouillage de ligne pour l'enregistrement qu'il utilise. Et, puisque c'est très rare le fait que ce code de série d'enregistrements va garder un enregistrement ouvert/verrouillé pendant une période de temps raisonnable, puis le verrouillage de page ou le verrouillage de ligne va rarement faire une différence ici. Ainsi, dans la plupart des cas, le verrouillage est nécessaire lorsque vous avez un utilisateur éditant des données dans un formulaire. Dans le cas du code, cela tend à être un problème rare.
ainsi les paramètres d'utilisateur dans les Outils->options détermine vraiment ce choix pour le utilisateur . Pour être vraiment clair ici et pas se couper les cheveux, cette rangée le réglage du verrouillage pour L'interface utilisateur n'annule pas vraiment le choix, autant que par défaut il force le problème.
souvenez-vous de la façon dont le verrouillage de ligne fonctionne lorsque vous activez cette fonctionnalité, est le moteur à réaction étend simplement la taille du disque à celle d'une page, et donc utilise juste un verrouillage de page à l'ancienne comme il l'a fait avant. C'est ce que j'entends par "force le problème". Il ne va pas faire une colline de haricots différent si l'Utilisateur a tourné sur le verrouillage de la rangée, puis vous essayez et prenez un enregistrement qui est verrouillé par un utilisateur avec un ensemble d'enregistrements qui n'a pas ouvert le reocrdsset avec le verrouillage de ligne (par opposition au verrouillage de page). Vous ne pouvez pas verrouiller et éditer l'enregistrement parce que cela revient à la résolution de la page à nouveau.
une vraie serrure n'existe pas. Toutefois, si vous augmentez la taille d'un enregistrement à toujours une page, puis vous atteindre le même objectif dans un rond-point.
compte tenu des informations ci-dessus, cela signifie deux choses:
tout d'abord, il ne va pas faire de différence si vous ouvrez votre reocdset comme page ou ligne si un utilisateur a déjà le dossier verrouillé avec un formulaire. L'utilisateur de modifier les données, de déterminer quelle partie de la page à utiliser (et c'est une pleine page de données si le verrouillage de ligne est activé).
2e numéro. Vous voulez penser longtemps et dur à l'utilisation de cette option, parce qu'elle provoque des fichiers à gonfler très rapide depuis chaque enregistrement édité sera forcé de prendre une page de base de données. Si vous utilisez un code qui met à jour des milliers d'enregistrements, alors vous ne voulez probablement pas faire ça. Cependant l'utilisateur ne peut pas vraiment éditer que beaucoup d'enregistrements dans une journée, et avec une routine quotidienne de compactage, il ne devient pas un problème à nouveau.
logiquement, cela signifie que l'option n'est vraiment utile que pour les utilisateurs éditant des données quand ils trébuchent les uns sur les autres. Cependant, pour le code recordset, il sera rarement utile ou même approprié de utilisez le verrouillage de ligne.
À la fin de la journée, la fonctionnalité est vraiment appropriée que si vous avez plusieurs utilisateurs qui tentent d'obtenir les mêmes données sous la même forme. Donc, c'est plus une fonctionnalité d'interface utilisateur que celle d'utiliser le code + reocordsets.
vous pourriez découvrir que ACE + dao peut ouvrir un reocrdset avec row locking, mais pourquoi s'inquiéter? Tu n'utilises pas dao, et tu ne l'aimes pas de toute façon. Et, il ne va pas aimer changer vos scénarios d'utilisateur de toute façon.
-- edit:
Je n'ai pas de lien sous la main qui explique ce verrouillage de page. Je sais que j'ai lu ça quelque part, mais je n'ai pas de lien.
j'ai été très occupé ces derniers jours (je fais partie de la beta access 2010, et lundi il y a aussi le CTP sorti pour le public qui s'est inscrit). Donc, j'ai été très occupé ces derniers temps.
cependant, vous pouvez essayer quelque code qui montrera ceci. Le le code suivant provoque environ 1 meg de bloat dans un BMD sans ligne verrouillée accordée. (elle passe d'environ 5,8 mégaoctets à environ 6,5 mégaoctets).
Dim rst As DAO.Recordset
Dim i As Long
Dim t As Single
Set rst = CurrentDb.OpenRecordset("contacts")
t = Timer
Me.Text1 = "working..."
DoEvents
Do While rst.EOF = False
rst.Edit
i = i + 1
rst!City = "ci " & i
rst.Update
rst.MoveNext
If i Mod 500 = 0 Then
Me.Text1 = i
DoEvents
End If
Loop
t = Timer - t
Me.Text1 = "done in " & t & " seconds"
Beep
si vous exécutez le même code avec le verrouillage d'enregistrement, le fichier devient énorme 123 mégas dans la taille. Voici le lien vers un exemple de BMD avec le code ci-dessus En it
http://www.kallal.ca/test/bloat.zip
donc, télécharger ci-dessus. Courir avec des outils->options->avancé-> ouvrir avec le verrouillage de niveau ligne.
videz la table. De compactage et de réparation. Changez le paramètre ci-dessus et lancez-le à nouveau (assurez-vous que vous quittez, puis entrez de nouveau dans la base de données après avoir changé ce paramètre).
si vous roulez au-dessus sans verrouillage de ligne..le fichier augmente d'environ une meg. Si vous l'exécutez avec le verrouillage de ligne, vous obtenez plus de 110 mo de fichier de données augmentent. C'est une très grande différence en effet.
ACEDAO au moins et probablement DAO utilise le verrouillage des enregistrements par défaut, indépendamment de la MS de la documentation. Ceci peut être mis en évidence par le bloat (mentionné ci-dessus) qui se produit après le passage d'un accès sous-jacent 97 DB à un accès 2000 ou ACCDB, en utilisant le même code DAO.
Pour plus de détails, voir ma réponse ici:
est-il préférable d'utiliser ADO ou DAO dans Access 2007?
édité à refléter un lien MSDN contenant les informations correctes:
"au niveau de l'Enregistrement de verrouillage est la valeur par défaut pour ADO et DAO les objets Recordset. Le verrouillage au niveau de la Page est la valeur par défaut pour les déclarations SQL DML (opérations globales telles que UPDATE, DELETE, et INSERT in statements) qui utilisent des objets de commande ADO ou des objets DAO QueryDef."
http://msdn.microsoft.com/en-us/library/aa165435 (office.10).aspx