设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5128|回复: 9
打印 上一主题 下一主题

[Access本身] [已解决]运行时错误3211.如何循环出错处理?或如何检测表被使用锁定?

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-11 11:11:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zww3008 于 2011-10-11 20:34 编辑

我的要求是:

生成表查询并使用表,默认生成表LSB1,如果该表已被其他用户或其他窗体使用,则生成并使用LSB2,如果LSB2也被使用中,则成并使用LSB3,依此类推......

我的代码是:
=================
声明节声明
Dim StrLSB As String
----------------------------

Sub AllSub(PID As Integer)
    Dim Str1 As String
   ' Dim StrLSB As String
    Dim i As Integer
    i = 1
ReCreateLSB:
On Error GoTo Err_AllSub

    StrLSB = "LSB" & i
    Str1 = "SELECT CategoryID INTO " & StrLSB & " FROM tblHWCategory WHERE ParentID=" + CStr(PID)
    DoCmd.RunSQL Str1                     '标记2

Exit_AllSub:
    Exit Sub

Err_AllSub:
    If err = 3211 Then
        i = i + 1                                 
        GoTo ReCreateLSB          '标记1
        '  Resume Next
     Else
        Resume Exit_AllSub
    End If
End Sub
================
现在问题情况是:LSB1已被使用时,能够通过出错处理自动运行到标记1,然后返回继续运行,本想继续生成LSB2,但此时LSB2也被使用中,运行到标记2时再次出错。

问:1、出错处理是不是只能使用一次?如何循环出错处理?
或者,2、如何用VBA检测表LSB?正在被使用中?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-10-11 11:37:07 | 只看该作者
试试捕捉错误代码,
如果出现3211错误i自动+1试试
3#
发表于 2011-10-11 11:39:06 | 只看该作者
do until err =“”
i=i+1
loop
4#
 楼主| 发表于 2011-10-11 11:53:23 | 只看该作者
具体怎么应用?
do until err =“”
i=i+1
loop
代码放在哪?反复试了好像不行。
5#
发表于 2011-10-11 12:24:10 | 只看该作者
试试这样
Sub AllSub(PID As Integer)
    Dim Str1 As String
    Dim StrLSB As String
    Dim i As Integer
    i = 1
'ReCreateLSB:
'On Error GoTo Err_AllSub
On Error Resume Next
Do While Err = 3211
    StrLSB = "LSB" & i
    Str1 = "SELECT CategoryID INTO " & StrLSB & " FROM tblHWCategory WHERE ParentID=" + CStr(PID)
    DoCmd.RunSQL Str1                     '标记2
    i = i + 1
Loop
End Sub

点击这里给我发消息

6#
发表于 2011-10-11 12:37:54 | 只看该作者
Do while Err.number<>0
   '再加个超时多少秒,也退出
loop

点击这里给我发消息

7#
发表于 2011-10-11 12:38:36 | 只看该作者
Do while Err.number<>0
    err.clear '清错误代码
    '再加个超时多少秒,也退出
   '你的处理代码
   
loop
8#
 楼主| 发表于 2011-10-11 20:32:11 | 只看该作者
感谢管理员和楼上的各位,综合大家的思路,问题解决了。

Sub AllSub(PID As Integer)
On Error Resume Next

    Dim Str1 As String
   ' Dim StrLSB As String
    Dim i As Integer
    i = 1
Do
    err.Clear    '清错误代码
  StrLSB = "LSB" & i
    Str1 = "SELECT CategoryID INTO " & StrLSB & " FROM tblHWCategory WHERE ParentID=" + CStr(PID)
    DoCmd.SetWarnings False
    DoCmd.RunSQL Str1
     i = i + 1
    'MsgBox err.Description
Loop While err.Number = 3211 And i < 50

End Sub
9#
 楼主| 发表于 2011-10-11 21:19:50 | 只看该作者
本帖最后由 zww3008 于 2011-10-11 21:22 编辑

这个问题的目的,是为了完善一个TreeView。

原来存在一个问题,即不能同时打开使用多个类似的TreeView窗体(多人打开同一窗体或一人打开同类多个窗体),因为要用到同一个表。
现在即解决了该问题,当发现表LSB1已被使用时,则自动使用LSB2...这样一来就可以批量制作和使用此类窗体了。

附上示例,供参考。


示例中,你可以同时打开frmSBbyJH窗体和frmSBbyJH2窗体以测试,现在没问题了。修改前同时打开时会出错的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

10#
发表于 2011-10-12 11:52:31 | 只看该作者
谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-23 23:22 , Processed in 0.110497 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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