VB+SQL 2000 实现数据库的备份和恢复

30 篇文章 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值