下面是将另一机器server中的sql数据库备份到本地的源代码,可为什么会出现备份设备出现错误的提示,且备份无法完成?如何达到目的?
这段代码用于备份本地的数据库是好使的!Dim cn As New ADODB.Connection
Dim s_path, s_dataexport As String
s_path = "\\" + 本地机器名 + "\C$\test"
s_dataexport = "backup database " + DatabaseName + " to disk='" + s_path + "'"
cn.open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" + DatabaseUser + ";Password=" + DatabasePWD + ";Initial Catalog=" + DatabaseName + ";Data Source=" + server
cn.Execute s_dataexport
这段代码用于备份本地的数据库是好使的!Dim cn As New ADODB.Connection
Dim s_path, s_dataexport As String
s_path = "\\" + 本地机器名 + "\C$\test"
s_dataexport = "backup database " + DatabaseName + " to disk='" + s_path + "'"
cn.open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" + DatabaseUser + ";Password=" + DatabasePWD + ";Initial Catalog=" + DatabaseName + ";Data Source=" + server
cn.Execute s_dataexport
server数据库备份到本地,就象是把server文件复制到本地。所以如果server没有权限访问本地机器,或者目标目录没有共享,或者s_path 没有设置正确,都可能产生错误。
s_path = "\\" + 本地机器名 + "\C$\test"
这种方式不可取.首先,不能保证server用户有权限连接客户机。其次,如果客户端不是NT,也就没有$可用。
所以,建议利用本地共享文件夹。s_path = "\\" + 本地机器名 + "\" + 共享文件夹名
你可以把本地C\test共享,假设共享名为test,那么s_path = "\\" + 本地机器名 + "\test"就可以了。
to jack_zhan(大熊) :你的方法不行阿
如果没人会,我只好揭帖了,郁闷
Public Const FO_MOVE = &H1
Public Const FO_COPY = &H2
Public Const FO_DELETE = &H3
Public Const FOF_NOCONFIRMATION = &H10
Public Const FOF_NOCONFIRMMKDIR = &H200
Public Const FOF_ALLOWUNDO = &H40
Public Const FOF_SILENT = &H4
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
'----------------------------
Private Sub m_backup_Click() '备份数据库On Error Resume Next Dim SHFileOp As SHFILEOPSTRUCT SHFileOp.wFunc = FO_COPY
SHFileOp.pFrom = App.Path & "\msDATA.mdb"
SHFileOp.pTo = App.Path & "\back\msDATA.mdb"
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
Call SHFileOperation(SHFileOp)
MsgBox "备份已完成!"
Exit SubErrHandler:
Me.MousePointer = 0End SubPrivate Sub m_restore_Click() '复原数据库
On Error Resume Next
Dim oldMdb As String
Dim newMdb As String
Dim SHFileOp As SHFILEOPSTRUCT SHFileOp.wFunc = FO_COPY
SHFileOp.pFrom = App.Path & "\back\msDATA.mdb"
SHFileOp.pTo = App.Path & "\msDATA.mdb"
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
Call SHFileOperation(SHFileOp) MsgBox "复原已完成!" Exit Sub
End Sub
'------------------------------------------------------
Private Sub m_Compact_Click() '数据库压缩
On Error Resume Next
Dim oldMdb As String
Dim newMdb As String cnnCMMS.Close oldMdb = App.Path & "\msDATa.mdb"
newMdb = App.Path & "\msDATAcopy.mdb" DBEngine.CompactDatabase oldMdb, newMdb, , , ";" Kill oldMdb Name newMdb As oldMdb Dim sConnect As String
Dim sSource As String
sSource = "Data Source=" & App.Path & "\msDATA.mdb"
sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & sSource
Set cnnCMMS = New ADODB.Connection
With cnnCMMS
.CursorLocation = adUseClient '.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open sConnect
End With
MsgBox "压缩已完成!"
End Sub
'*************************************************************************************至于备份,我一般使用两种方式,一种是直接拷贝数据库文件,另外一种是带Zip压缩的。
先说第一种直接拷贝:
在工程引用菜单里引用“Microsoft Scripting Runtime”,并且在窗体上放置一个CommonDialog控件,命名为cd,然后代码如下Private Sub cmdBeifen_Click()
Dim fso As New FileSystemObject, fil Set fil = fso.GetFile("你的数据库路径,比如C:\db1.mdb")
'下面这句是设置保存对话框的属性,具体可以查看MSDN的帮助。
cd.Flags = &H5006
'打开保存对话框
cd.ShowSave
'如果用户选择了一个路径并且选择的路径不是原始文件存在的路径,那么
If cd.FileName <> "" And cd.FileName <> "db1.mdb" Then
'进行拷贝文件
fil.Copy (cd.FileName)
MsgBox "数据备份已经顺利完成!", vbInformation, "恭喜!"
cd.FileName = "db1.mdb"
Else
MsgBox "没有完成备份,请稍后再试!", vbInformation, "提示!"
End If
End Sub'*********************************************************************************************