CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  数据库(包含打印,安装,报表)

数据库备份与恢复的老问题,但一直未能完善解决,请指点!

楼主DeepColor(深黑色)2006-03-11 15:47:17 在 VB / 数据库(包含打印,安装,报表) 提问

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

相关问题

  • 数据库的备份,运行出错,请高手指点
  • 数据库备份?
  • 数据库备份
  • 数据库备份?
  • 数据库备份???
  • 备份数据库
  • 数据库备份
  • 数据库备份
  • 数据库备份
  • 数据库的备份与恢复???(菜鸟级问题,请高手指点)

关键词

  • 数据库
  • 控件
  • 文件
  • db
  • access
  • 备份
  • mfile
  • 压缩
  • 恢复
  • fbackupdatabase

得分解答快速导航

  • 帖主:DeepColor
  • faysky2
  • faysky2

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo