Office中国论坛/Access中国论坛

标题: 请问一个窗口当前记录锁定的问题 [打印本页]

作者: 真主    时间: 2009-12-1 20:37
标题: 请问一个窗口当前记录锁定的问题
后台如果是mdb时,好像可以用Me.RecordLocks = 2,锁定当前记录
但我的后台是SQL,前台是MDB,请问如何锁定当前记录,防止两个人同时修改同一条记录
作者: luhao    时间: 2009-12-1 22:41
1# 真主

用事务来处理
作者: 真主    时间: 2009-12-2 13:00
我已搞定了,用的是以下的方法

  1. Option Compare Database
  2. Private Sub Form_AfterUpdate()
  3. DoCmd.SetWarnings False '关闭系统提示
  4. DoCmd.RunSQL "UPDATE 表1 SET 表1.文件可改记号1 = 0 Where (FmNeID=Forms!窗体2!FmNeID)"
  5. DoCmd.SetWarnings True '打开系统提示
  6. End Sub
  7. Private Sub Form_Current()
  8. Me.AllowEdits = False
  9. Me.AllowDeletions = False
  10. If IsNull(Text_文件可改记号) Then
  11. Else
  12. End If
  13. End Sub
  14. Private Sub Form_Open(Cancel As Integer)
  15. Me.Text_文件可改记号 = 0
  16. Me.Text_文件可改记号 = Rnd() + Format(Now(), "s") / 1000
  17. End Sub
  18. Private Sub Label_修改记录_Click()
  19. If DLookup("文件可改记号1", "表1", "FmNeID=Forms!窗体2.FmNeID") = 0 Or DLookup("文件可改记号1", "表1", "FmNeID=Forms!窗体2.FmNeID") = Me.Text_文件可改记号 Then
  20. DoCmd.SetWarnings False '关闭系统提示
  21. DoCmd.RunSQL "UPDATE 表1 SET 表1.文件可改记号1 = Text_文件可改记号 Where (FmNeID=Forms!窗体2!FmNeID)"
  22. DoCmd.SetWarnings True '打开系统提示
  23. Me.Text_当前记录编号 = Me.FmNeID
  24. Me.Requery      '刷新
  25. Me.Recordset.FindFirst "FmNeID=" + Str(Text_当前记录编号) + ""
  26. 'Me.Recordset.FindFirst "FmNeID='" & Text_当前记录编号 & "'"
  27. Me.AllowEdits = True
  28. Me.AllowDeletions = True
  29.     If Format(Now(), "s") < 30 Then
  30.     Me.文件可改记号2 = Me.文件可改记号2 + Text_文件可改记号
  31.     Else
  32.     Me.文件可改记号2 = Me.文件可改记号2 - Text_文件可改记号
  33.     End If
  34. Else
  35. Me.AllowEdits = False
  36. Me.AllowDeletions = False
  37. MsgBox "其他人员正在修改这条记录!", vbOKOnly, "非常抱歉"
  38. End If
  39. End Sub

复制代码

作者: 真主    时间: 2010-11-17 14:48
回复 luhao 的帖子

如果改为用事务来处理,请问怎样写,能不能给个例子,谢了
作者: luhao    时间: 2010-11-24 22:29
回复 真主 的帖子

论坛中有介绍的,可以查一查
作者: bpchan    时间: 2011-12-27 13:56
学习!!
作者: swj808    时间: 2011-12-27 14:25
本帖最后由 swj808 于 2011-12-27 14:33 编辑

我的解决办法,是在MDB前台建立与后台数据库相同的一个本地表,前台窗体的数据源为本地表,录入或编辑数据后,关闭窗体时把本地表的数据上传到后台数据库,删除本地表数据(其实这里是把本地表作为临时表使用).
这样处理的效果我觉得比较好:
1.程序处理上没有这么复杂.
2.数据编辑录入时是在本地表运行,速度比较快,占用网络和后台数据库的也资源非常小(基本只是在上传数据时才使用到).
3.较好地解决多用户时数据的锁定冲突问题.
关于防止两个用户同时编辑一条数据的问题,我觉得更多是因为需要防止产生数据的锁定冲突,使用上面的方法基本会是后面上传的数据会把前面上传的数据替换掉,问题不大.除非是要求一定要防止两个用户同时编辑一条数据的效果




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3