- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程高手之路—vb与数据库----多客户环境下VB 数据库编程之(七)
编程高手之路—vb与数据库----多客户环境下VB 数据库编程之(七)
页面锁定的锁定方案
如前所述,Microsoft Jet不能锁定单个的记录,每次读、写以及锁定的都是一页数据,面不是一个记录。根据记录的大小,一页可能包含多个记录。当锁定一个记录时,就会锁定那一页上的所有记录,如图8.6所示。
在高并发应用程序中,要求对指定记录提供畅通无阻的访问。可以用不同的策略来实现设计。
1.使用Text类型。可以用Text数据类型把字段添加到表中,直到记录长度超过1024个字节。由于Text是变长数据类型,必须显式地用数据来填补字段以获得一个定长格式。同时,这种技术可能会降低性能,因为如果每个记录都占用2K磁盘空间,则数据库的长度将会增加。因此,建议不要使用Text 数据类型。
2. 使用CHAR类型。SQL DDL CHAR 是一种定长数据类型。如果使用这种类型,则可不必用数据来填补字段。使用CHAR数据类型是实现这种技术的最简单而且保险的唯一方法。
3.使用开放锁定。另一种策略是:在任何地方都使用开放方式锁定。虽然开放式锁定不能避免页面锁定,但它可以使记录被锁定的时间最短,因此降低了不需要锁定的记录也被锁定的可能性。
4.使用自定义的锁定方案。有时候,页面锁定不能满足需要,而开放式锁定也可能无法满足需要。在这种情况下,可以考虑使用自定义的锁定方案。当一个记录被锁定时,可以用一个锁定表来标识。锁定表存储记录的键值、锁定状态(锁定或未锁定)以及锁定记录的用户名等。自定义锁定方案的实现需要大量的设计、实现以及测试时间。在许多情况下,它不能与内置的Microsoft Jet的功能重复。例如,即使实现单记录锁定,处理基于多个表的记录集的数据也是非常困难的,因为必须标识所有表,而这些表都包含必须锁定的记录。当自定义锁定方案只影响几个表,而且不是基于一个具有复杂连结和关系的数据模型时,使用自定义锁定方案较为适宜。
页面锁定中的错误处理
当使用页面锁定时,必须在代码中检查是否成功地实现了锁定。在开始时应禁止错误处理程序,然后尝试完成初始化一个锁定、检查错误,最后允许错误处理程序。在多用户环境下,所遇到的页面锁定错误有三种,见表。
错误代码和出错信息 原因和建议的操作
3186 不能存储;当前正被机器nane上的name用户锁定 当一个用户试图更新一页,而这一页包含了另一个用户设置的读锁定时,就会发生这个错误。为了处理这个错误,可以先等待一会儿,然后重新存储该记录。也可以通知发生这个问题的用户,并询问他们是否想要重试该操作
3197因为和另一个用户试图同时改变同一个数据,所以MicrosoftJet数据库引擎终止了该过程 在打开记录集或最后一次从记录中读取数据之后,另一个用户对当前记录作了更改,并使用Edit方法或Update方法时,就会产生这个错误。如果在使用Edit方法时产生了这个错误,就要用当前数据来刷新用户的数据视图然后再试一次Edit方法。如果这个错误是在使用update方法时发生的,则是因为使用了开放式锁定,并且在使用Edit方法后记录发生了变更。在这种情况下,应通知用户,其他人已经改变了数据。可以显示出当前数据并让用户选择:是覆盖其他用户的变更,还是取消编辑
3260不能更新;当前,被机器 name 上的 name用户锁定 锁定了包含当前记录的页面,并使用AddNew或Edlt方法时,就会发生这个错误。在使用Update方法来把一个记录存储到一个锁定的页面时,也会发生这个错误。在用户存储新的记录,或者在使用了开放式锁定后,另一个用户又来锁定该页面时,就会发生这种情况。为了处理这个错误,可等待一会儿,然后再试一次存储该记录。可以将该问题通知用户,并让用户决定是否要重试这个操作
用错误代码和出错信息可以测试记录是否被锁定。下面的过程可用来检测当前记录是否在一个锁定的页面上:
Function RecordLocked(rst As Recordset)AsBooleanDim blnLock As Boolean
On Error GoToErrorHandler
blnLock=rst.LockEdits 保存LockEdits属性的当前值
rst.LockEdits=True 设置保守式锁定
rst.Edit 试着编辑记录,如果记录被锁定,则会产生错误3197
RecordLocked=False
rst.CancelUpdate
rst.LockEdits=blnLock 恢复LockEdits属性的值
EXit FUnction
ErrorHandler:
Select Case Err
Case 3197:
Resume Next
Case Else
RecordLocked=True
Resume Next
您可能关注的文档
最近下载
- 《仪器分析—分光光度计》学科知识考试题库(附答案).docx VIP
- 年产770吨精细化学品改扩建项目(达得利公司)环境影响报告.pdf
- JCT 899-2016 混凝土路缘石.docx VIP
- JB T 3695-2008 电动葫芦桥式起重机 标准.pdf VIP
- 桥梁桩基施工专项方案(新编制) .pdf VIP
- 马拉松赛事赛事组织管理与赛事赛事经济效益评价报告.docx
- (GBT7588 1—2020)电梯制造与安装安全规范.pdf VIP
- 电子焊接培训课件.ppt
- 纪念中国人民抗日战争暨世界反法西斯战争胜利80周年主题党课PPT(优质ppt).pptx VIP
- 管幕顶进施工方法及装置.pdf VIP
文档评论(0)