Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

回复 加入收藏帖  复制
我要提问 帖子上移

[5分]疑难求解

cspa 等级: 贵宾★★★★★ 积分:719 金币:360 来自:北京Access交流中心 发表于:2013-01-07 14:43:43   已结帖
楼主

A、B、C三个通讯录。无论那个通讯录,   
    当记录数少于19(有时是18、17)或大于120时,点击“全选”(“取消”)复选框,工作正常。
   
    当记录数大于19(有时是18、17)但小于120时,点击“取消”复选框出现错误提示:

“运行时错误'3197'

由于您和其他用户试图同时改变同一数据,导致Microsoft Jet 数据库引擎停止进程。”

    求解这是为什么?

具体见附件。点击下载此附件

 

 

access培训  诚聘access开发人员

    cspa
      获得社区协助:请教问题(即发帖)21篇,其中获得解决的13篇;
      协助社区成员:协助他人(即回帖)807篇,其中被设为【最佳答案】的255篇;
      协助我们社区:发布技术文章9篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
Top
dbaseIIIer 等级:Access资深专家★★★★★ 积分:1147 金币:1080 来自:深圳Access交流中心 发表于2013/1/7 16:41:51 最佳答案
1楼 得分: 5

原因很简单,有鬼”  


想看电视,就不要投诉那个剧情不合理; 用 Access 就要接受,他内里的处理能力。


闭上眼睛瞎猜,就是   你的数据表的 记录大小 刚好在 19, 120记录 左右 

是 Jet 数据引擎 处理你这个记录集 的一个 “内存页” 的 暂存区间临界点,也有可能在 220,320左右都是错误所在,

因为你的记录集 是用窗体的 recordset clone 出来的,意思就是 有个线程在同时在处理更新后的 内存处理当中,

交给Access继续处理下一个事务,但刚才那个事务因为要操作 “内存页”,还没来得及释放,你又来更新了!


虽然是另一条记录,但是还是在同一个记录区段(内存页),所以就变成同时更新了!


解决方法就是

Private Sub Check33_Click()
Dim RsCheckAll As DAO.Recordset    '建立全选数据集
Dim tgt As Boolean

On Error GoTo eeeee           '<--------------------添加这里
tgt = Me.Label34.Caption = "全选"
Set RsCheckAll = Me.Child1.Form.RecordsetClone
With RsCheckAll
    If .RecordCount > 0 Then
        .MoveFirst
        n = 0
        Do While Not .EOF

             g=0                          '<--------------------添加这里

            .Edit
            !check = tgt
            .Update
            .MoveNext
        Loop
    End If
End With
Me.Label34.Caption = IIf(tgt, "取消", "全选")

RsCheckAll.Close
Set RsCheckAll = Nothing
exit sub

eeeee:                                '<--------------------添加这三行
g = g + 1
If g < 3 Then Resume

End Sub

再尝试 Edit 多一次就OK了! 代码里试3次都不行就退出!


不好意思的,我看你的代码太笨所以改过了!见谅!



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    何保辛
      获得社区协助:请教问题(即发帖)5篇,其中获得解决的0篇;
      协助社区成员:协助他人(即回帖)419篇,其中被设为【最佳答案】的114篇;
      协助我们社区:发布技术文章27篇,邀请了1名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
cspa 等级:贵宾★★★★★ 积分:719 金币:360 来自:北京Access交流中心 发表于2013/1/7 17:04:20 
2楼 得分: 0
非常感谢dbaseIIIer老总解决了我的问题,并帮我优化了代码。这个问题算不算Access的BUG呢?

    cspa
      获得社区协助:请教问题(即发帖)21篇,其中获得解决的13篇;
      协助社区成员:协助他人(即回帖)807篇,其中被设为【最佳答案】的255篇;
      协助我们社区:发布技术文章9篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
dbaseIIIer 等级:Access资深专家★★★★★ 积分:1147 金币:1080 来自:深圳Access交流中心 发表于2013/1/8 3:34:28 
3楼 得分: 0
算呀!绝对,绝对,绝对,绝对 是个 bug

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    何保辛
      获得社区协助:请教问题(即发帖)5篇,其中获得解决的0篇;
      协助社区成员:协助他人(即回帖)419篇,其中被设为【最佳答案】的114篇;
      协助我们社区:发布技术文章27篇,邀请了1名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
总记录:3篇  页次:1/1 9 1 :
您还没有在Access软件网登录不能回复帖子
  • 你没有登录,请点击后面链接登录:登录
  • 如果你没有注册,请点击后面链接注册:注册,注册完成后,请再次访问本页功能。