设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

ACCESS通用系统用2003升到2007后遇到的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-3-2 21:37:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yanghuap 于 2011-3-2 21:44 编辑

在使用红尘如烟的ACCESS通用系统用过程中,因ACCESS版本不同,将原来的ACCESS2003版升级到access2007版后,备份与数据还原功能不能用了,原因是ACCESS2007不支持Application.FileSearch,请问以下备份代码应该怎么修改?多谢热心人的指教,不胜感激!(应该只改红允的部分就可以了吧?)

Option Explicit

'备份方式常量枚举
Public Enum conBackupMode
conBackupModeSaveAll = 0 '保留所有备份
conBackupModeSaveEveryDay = 1 '每天保留一个备份
conBackupModeSaveEveryMonth = 2 '每月保留一个备份
End Enum

'备份后台数据库文件
Public Function BackupData() As Boolean
On Error GoTo Err_BackupData

Dim strBackupDir As String '备份目录路径
Dim strSource As String '要备份的源文件名
Dim strDestination As String '生成的备份文件名
Dim lngBackupMode As Long '自动备份模式
Dim lngMaxQty As Long '允许最大备份数量
Dim frm As Form
Dim intI As Integer

'如果用户取消确认,则退出不进行备份
If GetDbSetting("ConfirmBeforeBackup", False) Then
If MsgBox("是否备份资料?", vbQuestion + vbYesNo) = vbNo Then Exit Function
End If

CurrentDb.close

'取得后台数据库文件路径名
strSource = GetDbSetting("DataFileName", "")
If Not strSource Like "[A-z]:\*" Then strSource = CurrentProject.Path & "\" & strSource

'取得备份目录路径名
strBackupDir = GetDbSetting("BackupDir", "备份\")
If Not strBackupDir Like "[A-z]:*" Then strBackupDir = CurrentProject.Path & "\" & strBackupDir
If Not FolderExists(strBackupDir) Then strBackupDir = CreateDir(strBackupDir)

'取得备份文件路径名
strDestination = Mid$(strSource, InStrRev(strSource, "\") + 1)
strDestination = strBackupDir & Format$(Now(), "yyyy-mm-dd hh.nn_") & strDestination & ".bak"

With Application.FileSearch
.NewSearch
.LookIn = strBackupDir
.SearchSubFolders = False
'如果已有备份文件数量加1大于允许的最大备份数量,则删除多出来的早期档
lngMaxQty = GetDbSetting("MaxBackFileQuantity", 0)
.FileName = "*.bak"
If .Execute > 0 And lngMaxQty > 0 Then
If .FoundFiles.Count + 1 > lngMaxQty Then
For intI = 1 To (.Execute + 1 - lngMaxQty)
Kill .FoundFiles(intI)
Next
End If
End If '
'根据备份模式删除已有的备份文件(例如备份模式为每天一个备份,如果当天已经进行过备份,
'则再次备份时之前的备份文件会被删除)
lngBackupMode = GetDbSetting("BackupMode", conBackupModeSaveAll)
Select Case lngBackupMode
Case conBackupModeSaveAll
.FileName = Format$(Now(), "yyyy-mm-dd hh.nn") & "*.bak"
Case conBackupModeSaveEveryDay
.FileName = Format$(Now(), "yyyy-mm-dd") & "*.bak"
Case conBackupModeSaveEveryMonth
.FileName = Format$(Date, "yyyy-mm") & "*.bak"
End Select
If .Execute > 0 Then
For intI = 1 To .FoundFiles.Count
Kill .FoundFiles(intI)
Next
End If
End With

'进行备份操作(复制一个后台数据库文件到备份目录并按照备份文件命名规则重新命名)
FileCopy strSource, strDestination
If Err.Number = 0 Then BackupData = True


Exit_BackupData:
Exit Function

Err_BackupData:
BackupData = False
Select Case Err.Number
Case 53
MsgBox "未指定要备份的源文件。", vbCritical
Case 70
MsgBox "后台数据库被其它用户或您自己以独占方式打开,现在不能进行备份。", vbCritical
Case 71
MsgBox "指定的备份目录所在磁盘可能为读卡器,现在未连接存储卡,不能写入备份文件。", vbCritical
Case 75
MsgBox "当前登录操作系统的用户没有删除文件的权限,不能替换已有备份。", vbCritical
Case Else
MsgBox Err.Description, vbCritical
End Select
Resume Exit_BackupData

End Function
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2011-3-2 23:06:44 | 只看该作者
你可以试着用 Dir 函数替代 Application.FileSearch

点击这里给我发消息

3#
发表于 2011-3-2 23:55:20 | 只看该作者


Application.FileSearch 的替代示例:
http://dfenton.com/DFA/download/Access/FileSearch.zip

本帖子中包含更多资源

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

x
4#
 楼主| 发表于 2011-3-3 17:15:28 | 只看该作者
謝謝 zhuyiwen 管理員的熱心幫助,不過你的這個示例看得我好辛苦,還沒有弄懂。

点击这里给我发消息

5#
发表于 2011-3-5 14:23:08 | 只看该作者
首先声明,这不是我的代码

不过外国佬写代码很严谨,值得学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 20:01 , Processed in 0.122648 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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