Access交流中心

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

[5分]关于自动压缩数据库函数中的疑点

殷小宝  发表于:2013-05-27 22:09:58  
复制

这是李导欢的自定义压缩修复数据库的函数:

Public Function RepairDatabase(strSource As String) As Boolean
    On Error GoTo error_handler
    Dim i As Integer
    '生成压缩后的文件名
    Dim strDestination As String
    i = 1
    Do
        strDestination = strSource & i
        If Dir(strSource & i) = "" Then
            Exit Do
        Else
            i = i + 1
        End If
    Loop
      RepairDatabase = _
    Application.CompactRepair( _

                              LogFile:=True, _
                              SourceFile:=strSource, _
                              DestinationFile:=strDestination)
    '压缩完成后删除原文件
    Kill strSource
    '把压缩后的文件名改成原文件名
    Name strDestination As strSource
    On Error GoTo 0  

   Exit Function
error_handler:
    RepairDatabase = False
End Function 

对有下划线标记的代码不理解,strDestination= strSource & i,这个strDestination难道有多个?i究竟循环至几才结束?还有   On Error GoTo 0  它是什么意思,以前我见过的是有个0标号的代码,可这里没有。敬请老师们予以解答,谢谢!

 

Top
殷小宝 发表于:2013-05-28 16:20:23
strDestination = strSource & i从这句看来,strDestination一般情况下只能为 strSource &"1"了.正常情况下,没有 strSource +1, strSource +2, strSource +3这样的文件.我觉得此循环是多余的,是属画蛇添足之举,不知对否

殷小宝 发表于:2013-05-28 16:27:48

On Error GoTo 0  

   Exit Function
error_handler:
    RepairDatabase = False

On Error GoTo 0  表示禁止当前已启动的错误处理程序,而下面又有错误处理程序,二者是否有矛盾?



t小雨 发表于:2013-05-28 16:37:24

通过这个循环来构造临时文件名是比较严谨的态度,并非多余,不怕一万就怕万一嘛。比如程序运行途中断电,可能就会残留下 strSource &"1" 这个临时文件,这时运行就出错了。

当然也可不用循环,可先判断该文件名是否存在,存在则删除,再运行压缩代码:

If Dir(strSource & i) <> "" Then Kill strSource & i

RepairDatabase = ......



t小雨 发表于:2013-05-28 16:49:58

On Error GoTo 0  是程序运行到此处时,关闭之前的错误处理。

在这里看来是多余的,因为下面紧跟着 Exit Function ,也就是退出过程,而退出过程时,错误处理程序会自动关闭



殷小宝 发表于:2013-05-30 12:01:40
谢谢小雨老师的解答。

总记录:5篇  页次:1/1 9 1 :