数据库备份与恢复的老问题,但一直未能完善解决,请指点!
VB+Access97数据库
有“备份”、“恢复”按键
1、备份功能中,要求可以选择路径并自动以时间生成*.rar文件
2、恢复功能中,要求可以选择路径及选用备份后的rar文件,并且最好有时间对比功能,并提示日期与当前日期作对比!
请高手指点,并注明要引用什么控件!
多谢
问题点数:100、回复次数:18Top
1 楼guxingfeiyu(孤星飞雨)回复于 2006-03-11 15:56:36 得分 0
Access有备份/恢复的必要吗?实现办法很简单,文件拷贝+压缩/解压缩。
压缩/解压不会的话到网上找个RAR(ZIP)控件就行.Top
2 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-13 16:49:14 得分 20
备份:
'备份e:\db1.mdb 为e:\db2.mdb
Private Sub Command1_Click()
Dim mfile As String, mfile2 As String
mfile = "e:\db1.mdb"
mfile2 = "e:\db2.mdb"
Dim buff() As Byte, i As Long
i = FileLen(mfile)
ReDim buff(i - 1)
Open mfile For Binary As #1
Get #1, , buff
Close #1
Open mfile2 For Binary As #1
Put #1, , buff
Close #1
MsgBox "备份完毕!"
End Sub
恢复与备份是一样的,都是写文件,如果需要压缩与解压,调用 压缩与解压缩软件来完成Top
3 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-13 17:30:08 得分 0
可以用filecopy来完成,然后使用rar来压缩Top
4 楼province_(雍昊)回复于 2006-03-13 17:57:03 得分 0
压缩的话既可以用WINRAR的命令行方式,也可以调用其DLL来实现。Top
5 楼cxianfa(含笑)回复于 2006-03-13 18:48:28 得分 0
我只能做到一般的备份和恢复但是要解压这中功能我就不回其实我觉得没有必要把Top
6 楼cxianfa(含笑)回复于 2006-03-13 18:50:12 得分 0
to faysky2() 你这个代码是否针对access的Top
7 楼DeepColor(深黑色)回复于 2006-03-16 13:52:54 得分 0
各位,还没有达到可以自己指定目录以及自定数据库的文件名吖!?Top
8 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-16 14:05:22 得分 0
可以用CommonDialog控件来指定路径及文件Top
9 楼DeepColor(深黑色)回复于 2006-03-16 15:22:37 得分 0
可以详细点吗,小弟新手一个~~~多谢大侠Top
10 楼51365133(渊海)回复于 2006-03-16 15:50:31 得分 0
*************************************************************************
'**模 块 名:fBackupDatabase_a
'**描 述:备份数据库,返回出错信息,正常恢复,返回""
'**调 用:fBackupDatabase_a "备份文件名","数据库名"
'**参数说明:
'** sBackUpfileName 恢复后的数据库存放目录
'** sDataBaseName 备份的数据名
'** sIsAddBackup 是否追加到备份文件中
'**说 明:引用Microsoft ActiveX Data Objects 2.x Library
'**创 建 人:邹建
'**日 期:2003年12月09日
'*************************************************************************
Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _
, ByVal sDataBaseName$ _
, Optional ByVal sIsAddBackup As Boolean = False _
) As String
Dim iDb As ADODB.Connection
Dim iConcStr$, iSql$, iReturn$
On Error GoTo lbErr
'创建对象
Set iDb = New ADODB.Connection
'连接数据库服务器,根据你的情况修改连接字符串
iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
iDb.Open iConcStr
'生成数据库备份语句
iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _
"to disk='" & sBackUpfileName & "'" & vbCrLf & _
"with description='" & "zj-backup at:" & Date & "(" & Time & ")'" & vbCrLf & _
IIf(sIsAddBackup, "", ",init")
iDb.Execute iSql
GoTo lbExit
lbErr:
iReturn = Error
lbExit:
fBackupDatabase_a = iReturn
End Function
'*************************************************************************
'**模 块 名:frestoredatabase_a
'**描 述:恢复数据库,返回出错信息,正常恢复,返回""
'**调 用:frestoredatabase_a "备份文件名","数据库名"
'**参数说明:
'** sDataBasePath 恢复后的数据库存放目录
'** sBackupNumber 是从那个备份号恢复
'** sReplaceExist 指定是否覆盖已经存在的数据
'**说 明:引用Microsoft ActiveX Data Objects 2.x Library
'**创 建 人:邹建
'**日 期:2003年12月09日
'*************************************************************************
Public Function fRestoreDatabase_a(ByVal sBackUpfileName$ _
, ByVal sDataBaseName$ _
, Optional ByVal sDataBasePath$ = "" _
, Optional ByVal sBackupNumber& = 1 _
, Optional ByVal sReplaceExist As Boolean = False _
) As String
Dim iDb As ADODB.Connection, iRe As ADODB.Recordset
Dim iConcStr$, iSql$, iReturn$, iI&
On Error GoTo lbErr
'创建对象
Set iDb = New ADODB.Connection
Set iRe = New ADODB.Recordset
'连接数据库服务器,根据你的情况修改连接字符串
iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
iDb.Open iConcStr
'得到还原后的数据库存放目录,如果没有指定,存放到SQL SERVER的DATA目录
If sDataBasePath = "" Then
iSql = "select filename from master..sysfiles"
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
iSql = iRe(0)
iRe.Close
sDataBasePath = Left(iSql, InStrRev(iSql, "\"))
End If
'检查数据库是否存在
If sReplaceExist = False Then
iSql = "select 1 from master..sysdatabases where name='" & sDataBaseName & "'"
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
If iRe.EOF = False Then
iReturn = "数据库已经存在!"
iRe.Close
GoTo lbExit
End If
iRe.Close
End If
'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
iSql = "select spid from master..sysprocesses where dbid=db_id('" & sDataBaseName & "')"
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
While iRe.EOF = False
iSql = "kill " & iRe(0)
iDb.Execute iSql
iRe.MoveNext
Wend
iRe.Close
'获取数据库恢复信息
iSql = "restore filelistonly from disk='" & sBackUpfileName & "'" & vbCrLf & _
"with file=" & sBackupNumber
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
'生成数据库恢复语句
iSql = "restore database [" & sDataBaseName & "]" & vbCrLf & _
"from disk='" & sBackUpfileName & "'" & vbCrLf & _
"with file=" & sBackupNumber & vbCrLf
With iRe
While Not .EOF
iReturn = iRe("PhysicalName")
iI = InStrRev(iReturn, ".")
iReturn = IIf(iI = 0, "", Mid(iReturn, iI)) & "'"
iSql = iSql & ",move '" & iRe("LogicalName") & _
"' to '" & sDataBasePath & sDataBaseName & iReturn & vbCrLf
.MoveNext
Wend
.Close
End With
iSql = iSql & IIf(sReplaceExist, ",replace", "")
iDb.Execute iSql
iReturn = ""
GoTo lbExit
lbErr:
iReturn = Error
lbExit:
fRestoreDatabase_a = iReturn
End Function
Top
11 楼DeepColor(深黑色)回复于 2006-03-16 16:20:55 得分 0
??!看不明...Top
12 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-16 18:03:19 得分 80
添加CommonDialog控件(工程/部件/Microsoft/CommonDialog Control 6.0)
Private Sub Command1_Click()
Dim mfile As String, mfile2 As String
On Error Resume Next
CommonDialog1.Filter = "Access文件(*.mdb)|*.mdb"
CommonDialog1.ShowSave
mfile = App.Path & "\db1.mdb" '要备份的文件为当前文件夹下的 db1.mdb
mfile2 = CommonDialog1.FileName '得到目标文件的路径
If Trim(mfile2) = "" Then Exit Sub
If Dir(mfile2) <> "" Then
If MsgBox(Dir(mfile2) & " 文件已经存在,是否替换?", vbYesNo, "警告") = vbNo Then Exit Sub
End If
Dim buff() As Byte, i As Long
i = FileLen(mfile)
ReDim buff(i - 1)
Open mfile For Binary As #1
Get #1, , buff
Close #1
Open mfile2 For Binary As #1
Put #1, , buff
Close #1
MsgBox "备份完毕!"
End Sub
Top
13 楼DeepColor(深黑色)回复于 2006-03-16 20:57:11 得分 0
faysky2() 按你最后一贴去做,点击了,没有反映,为何呢?!Top
14 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-16 21:14:32 得分 0
你是不是没添加CommonDialog控件到窗体上?Top
15 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-16 21:15:59 得分 0
常规工具栏里默认是没有CommonDialog控件的,你需要从部件里添加:
(工程/部件/Microsoft/CommonDialog Control 6.0)Top
16 楼DeepColor(深黑色)回复于 2006-03-16 21:36:34 得分 0
如图:
http://www.lijing.com.cn/123.gif
已经打钩了~~Top
17 楼DeepColor(深黑色)回复于 2006-03-16 21:43:21 得分 0
哈,傻了,已经成功了~~~
不过,还有还原呢~~~?
还是麻烦一下你~~~~:P
先谢谢了~Top
18 楼DeepColor(深黑色)回复于 2006-03-16 22:00:27 得分 0
还有就是压缩的问题~Top




