轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 电脑主程序开源 查看主题

实现页面锁定的一个具体例子

发布者: salmahayek | 发布时间: 2018-2-4 15:23| 查看数: 4801| 评论数: 1|帖子模式

实现页面锁定时使用开放式锁定,可按如下步骤操作:

(1)打开一个表类型或动态集类型的记录集,它就是想要编辑的数据。

(2)把数据指针移动到一个记录上。

(3)把记录集的LockEdits属性设置为False,指定开放式锁定。

(4)用Edit方法编辑该记录(该记录还没有被锁定)。

(5)提交该记录。

(6)用Update方法来提交记录的变更(这将试图锁定记录)。

(7)检查Update方法是否成功。如果没有成功,则再试;

当使用事务时,开放式锁定将转换为保守式锁定。因为在提交事务之前,事务一直拥有写锁定,所以即使把LockEdits属性设置为False,也会转换为保守式锁定。
在保守式锁定中,Update方法可能会失败。这是因为Edit方法没有设置写锁定,并不意味着Update方法没有置写锁定。换句话说,当一个用户用保守式锁定打开记录集时,即使第二个用户使用的是开放式锁定,他对相同数据的更新也会失败。下面通过一个例子说明如何实现保守式锁定。编写一个Function过程,用来实现保守式锁定,并用该过程更新数据库。

FUnctionUpdateUnitslnStoCk(strlAsString,Str2AsStnng)

Dim dbs As DatabaseDim rstStr As RecordsetDim blnError As BooleanDim intCount As IntegerDim intLockCount As IntegerDim intChoiCe As IntegerDim intRndCount As Integer

Dim i As Integer

OnErrorGoToErrorHandler ’以共享模式打开数据库

Set dbs=openDatabase(“d:\dbtest\dbtest.mdb”) ’打开表进行编辑

Set rstStr=dbs.OpenRecordset(”tb”,dbOpenDynaset)

With rstStr

.LockEditS=True ’把锁定类型设置为保守方式

.FindFirst”电话=” & Chr(34) & strl & Chr(34)

If.NoMatch Then

UpdateUnitslnStock=-l

GoTo CleanExit

End lf

’试图编辑记录。如果发生锁定错误,则错误处理程序会试着解决它,因为该程序使用的是保守式锁定,所以当试图编辑一个记录时会产生错误。如果它使用开放式锁定,那么就会在更新记录时产生错误

.Edit

![电话]=str2

.Update

End With

CleanExit:

rstStr.Closedbs.CloSe

EXit Function

ErrorHandler:

Select Case Err

Case 3197

’记录集中的数据在被打开之后发生了变更,再试一下编辑该记录,这将自动刷新记录集,以显示最新的数据

Resume

Case 3260 '记录被锁定

IntLockCount=IntLockCount + 1

’已经两次试图获得锁定,让用户取消或重试

If intLockCount > 2 Then

intChoice=MsgBox(Err.Description & "Retry?",vbYesNo + VbQuestion)

If intChoice=vbYes Then

intLockCount=1

ElSe

UpdateUnitslnStock=ERR_RECORDLOCKED

Resume CleanExitEnd lf

End lf

’移交给Windows

DOEVents

’延迟一个较短的随机时间,每次锁定失败后就把这个时间间隔变长一些

intRndCount=intLockCount ^ 2 * Int(Rnd * 3000 + 1000)

For i=1 To intBndCount: Next i

Resume ’再试一次编辑

Case Else '非预期的错误

MsgBOX"Error" & Err & ":" & Error, _

VbOKOnlv

UpdateUnitslnStock=FAILED

ResunleCleanExitEnd Select

End FunCtlon

上述过程打开一个数据库dbtest.mdb,该数据库中有一个名为tb的表,其内容如图所示。

姓名 地址 电话 邮政编码
王春明 西城区 69039026 100089
李新民 西城区 68026097 100079

UpdateUnitslnStock过程有两个参数,第一个参数是表中指定字段(过程中为“电话”)原来的内容,第二个参数是该字段修改后的内容。过程中用rstStr.LockEdits=True

指定保守式锁定,接着指定要修改的字段,如果要修改的字段不存在,则过程返回值为 -1,并关闭表和数据库,退出过程;如果找到了要修改的字段,则用Edit和Update方法对其进行修改和更新。程序的其余部分是错误处理子程序,主要用来对可能出现的错误进行处理。

为了调用上面的过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:

Private Sub Command1_Click() 。

a=UpdateUnitslnStock(”3456.8765”,”2222.3333”)

b=UpdateUnitslnStock(”6845.7651”,”4444.5555”)

c=UPdateUnitslnStock(”6842.2939“,”6666.7777”)

End Sub

运行程序,单击命令按钮,即可调用UpdateUnitslnStock过程,修改“电话”字段的内容。

最新评论

holle 发表于 2022-5-18 14:48
电影源代码

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表