关于用vb备份和恢复数据库的问题?

sun7bear88 2005-11-27 11:46:03
我想问下大怎么用进度条显示数据库恢复或备份的进度呢?
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bear88 2005-11-28
  • 打赏
  • 举报
回复
你所说的DOEVENTS加在代码中的哪一行列?还有如何让sql语句执行完毕进度条就停止列?
leady27 2005-11-28
  • 打赏
  • 举报
回复
个人浅见如下:
因为你进行的备份跟恢复都是在MSSQL中进行的.(通过设定的SQL语句进行EXECUTE达到目的)
其实我看了一下你的这个SQL语句,应该属于将数据库文件复制到另外一个地方的一个实现方式而已. 你要显示数据库恢复和备份的进度,不知是何用意,是为了让使用者不会产生软件运行死掉的感觉吗? 因为我知道可能在恢复/备份的数据库很大的时候,会出现程序没有响应的情况.所以,我建议在代码中加一行DOEVENTS,然后弄个假的进度条(不停向前滚动),然后在SQL语句执行完毕后让进度条停止.(可以放在一个窗口中,并提示"请等待").
不知道这样行不行?因为,我觉得既然是用MSSQL进行备份/恢复了,就只能判断它是否成功执行了你的命令而已.

PS: 如有不同的意见,还请提出.
leady27 2005-11-28
  • 打赏
  • 举报
回复
嗯...对于DOEVENTS一般是放在循环当中,并转让控制权给操作系统.
你给出的是备份和恢复的两个模块. 建议在引用这个模块之前可以加个DOEVENTS试一下,
并开始进行一个进度条的滚动演示(这个是虚的,就是让它不停的从头到尾的动,当然速度可以不用很快.)
我前面说过了,当执行SQL语句后,其实是将操作转给MSSQL了,它不会返回完成到多少了,最多返回并告诉你是否成功完成操作. 因此,这个进度条其实是假的,只能说在MSSQL返回是否操作成功的时候,停止它的滚动而已..

PS: 不知道我讲得你可不可以理解并接受就是了....
cxianfa 2005-11-27
  • 打赏
  • 举报
回复
我这几天也用到数据库备份和恢复的,但是我的没有用到进度条,虽然交流?
bear88 2005-11-27
  • 打赏
  • 举报
回复
是用mssql2000数据库
我是用下面两个函数进行备份和恢复的呀~
'*************************************************************************
'**模 块 名: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 = True _
) 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;User ID=sa;Initial Catalog=Entertainment;Data Source=SUN7BEAR"
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 = "数据恢复失败"
lbExit:
fRestoreDatabase_a = iReturn
End Function


'**模 块 名: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;User ID=sa;Initial Catalog=Entertainment;Data Source=SUN7BEAR"
iDb.Open iConcStr

'生成数据库备份语句
iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _
"to disk='" & sBackUpfileName & "'" & vbCrLf & _
"with description='" & "SUN7BEAR-backup at:" & Date & "(" & time & ")'" & vbCrLf & _
IIf(sIsAddBackup, "", ",init")

iDb.Execute iSql
iReturn = "数据备份成功"
GoTo lbExit

lbErr:
iReturn = "数据备份失败"
lbExit:
fBackupDatabase_a = iReturn
End Function
leady27 2005-11-27
  • 打赏
  • 举报
回复
问题1: 是用什么数据库?
问题2: 是如何进行备份和恢复的
备份: 整个文件复制到另外一个地方,改个名字,就叫备份,还是说,将数据库中的数据一条条读出,写到另外一个空的数据库中?
恢复: 是将某个自定义名称的文件复制回来,改成数据库的默认名字,就叫恢复,还是说,将数据从某个文件中一条条读回来,覆盖原来数据库中的相同记录.并将不相同的都删除掉?

或者说,我都猜错了.
因为,总是要一个过程的,什么样的过程,可以选择用什么样的进度提示.如果只是单纯的复制个文件,改个名字,我记得有个API是用来控制复制文件的进度的(就是我们在WINDOWS上从这个位置复制文件到另一个位置时显示的进度对话框).

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧