以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 如何通过一个自制按键实现数据备份与恢复 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11225) |
-- 作者:zstk7333 -- 发布时间:2011/7/14 8:56:00 -- 如何通过一个自制按键实现数据备份与恢复 我想在我的程序界面的主菜单上制作两个按键,分别是数据备份和数据恢复,想请教一下,可否给出一个代码?谢谢 |
-- 作者:雨中的泪 -- 发布时间:2011/7/14 9:27:00 -- (五)、<备份数据>按钮代码: Dim dlg As New SaveFileDialog \'指定一个新的SaveFileDialog dlg. title= "备份数据" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 If FileSys.FileExists(dlg.filename) Then \'如果指定的文件存在 ex.Format = "Access" \'指定导出文件格式 ex.filepath = dlg.filename \'指定目标文件 ex.NewTableName = "调资基础数据" \'指定导出后的表的名称 ex.Export() \'开始导出数据
修改代码(带有数据库加密): Dim dlg As New SaveFileDialog \'指定一个新的SaveFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "备份数据" dlg.OverwritePrompt = False If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 If FileSys.FileExists(dlg.filename) Then \'如果指定的文件存在 if Messagebox.Show("有同名文件存在,是否删除?", "提示", MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes then FileSys.DeleteFile(dlg.filename,2,2) \'则彻底删除之 Else Return End if End If Dim ex as New Exporter ex.SourceTableName = "调资基础数据" \'指定导出表 ex.Format = "Access" \'指定导出文件格式 ex. PassWord = "TZX_GWY_JT_8888" \'用此属性指定目标文件的密码 ex.filepath = dlg.filename \'指定目标文件 ex.NewTableName = "调资基础数据" \'指定导出后的表的名称 ex.Export() \'开始导出数据 FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) EncryptFile(dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) MessageBox.Show("备份数据生成完成!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information) End If
(六)、<恢复数据>按钮代码: (1)、原代码: If MessageBox.Show( "恢复数据库操作将清空数据库,确定是否清空?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DataRows.Clear() \'清空指定表数据 Else Return \'点击否终止代码的执行 End If Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "数据恢复" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Dim ip as New Merger ip.SourcePath = dlg.filename \'指定数据文件 ip.SourceTableName = "调资基础数据" \'指定要合并的表 ip.Format = "Access" \'指定合并文件格式 ip. PassWord = “TZX_GWY_JT_8888” \'用此属性指定合并文件的密码 ip.Fields = “单位名称” \' 指定要合并的字段(列) ip. DataTableName ="数据接收临时判断" \'合并后的表名 ip. Merge() \'开始合并 Dim dws As List(Of String) \'定义一个字符型数组集合 dws = DataTables("调资基础数据").GetUniqueValues("", "单位名称") \'列出所有单位 For each dw As String In dws \'逐个单位判断 Dim dr As DataRow = DataTables("数据接收临时判断").find("[单位名称] = \'" & dw & "\'") If dr IsNot Nothing Then If MessageBox.Show( dw & "的记录已经存在,确定是否请删除?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DeleteFor("[单位名称] = \'" & dw & "\'") Else Return \'点击否终止代码的执行 End If End If Next Dim mg As New Merger mg.SourcePath = dlg.filename mg.SourceTableName = "调资基础数据" mg.Format = "Access" mg. PassWord = "TZX_GWY_JT_8888" mg.DataTableName = "调资基础数据" mg.Merge() MessageBox.Show("数据恢复完成!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Question) DataTables("数据接收临时判断").DataRows.Clear() \'清空指定表数据 End If (2)、简化代码: If MessageBox.Show( "恢复数据库操作将清空数据库,确定是否清空?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DataRows.Clear() \'清空指定表数据 Else Return \'点击否终止代码的执行 End If Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "数据恢复" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Dim mg As New Merger mg.SourcePath = dlg.filename mg.SourceTableName = "调资基础数据" mg.Format = "Access" mg. PassWord = "TZX_GWY_JT_8888" mg.DataTableName = "调资基础数据" mg.Merge() MessageBox.Show("数据恢复完成!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Question) Else MessageBox.Show( "数据库已被清空!!!","提示",MessageBoxButtons. OK,MessageBoxIcon.Warning) End If
(3)、修改代码(带有数据库加密): If MessageBox.Show( "恢复数据库操作将清空数据库,确定是否清空?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DataRows.Clear() \'清空指定表数据 Else Return \'点击否终止代码的执行 End If Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "数据恢复" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) DecryptFile (dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) Dim ip as New Merger ip.SourcePath = dlg.filename \'指定数据文件 ip.SourceTableName = "调资基础数据" \'指定要合并的表 ip.Format = "Access" \'指定合并文件格式 ip. PassWord = "TZX_GWY_JT_8888" \'用此属性指定合并文件的密码 ip.Fields = "单位名称" \' 指定要合并的字段(列) ip. DataTableName ="数据接收临时判断" \'合并后的表名 ip. Merge() \'开始合并 Dim dws As List(Of String) \'定义一个字符型数组集合 dws = DataTables("调资基础数据").GetUniqueValues("", "单位名称") \'列出所有单位 For each dw As String In dws \'逐个单位判断 Dim dr As DataRow = DataTables("数据接收临时判断").find("[单位名称] = \'" & dw & "\'") If dr IsNot Nothing Then If MessageBox.Show( dw & "的记录已经存在,确定是否请删除?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DeleteFor("[单位名称] = \'" & dw & "\'") Else FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) EncryptFile(dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) Return \'点击否终止代码的执行 End If End If Next Dim mg As New Merger mg.SourcePath = dlg.filename mg.SourceTableName = "调资基础数据" mg.Format = "Access" mg. PassWord = "TZX_GWY_JT_8888" mg.DataTableName = "调资基础数据" mg.Merge() MessageBox.Show("数据恢复完成!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Question) DataTables("数据接收临时判断").DataRows.Clear() \'清空指定表数据 FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) EncryptFile(dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) Else MessageBox.Show( "数据库已被清空!!!","提示",MessageBoxButtons. OK,MessageBoxIcon.Warning) End If (4)、修改代码(带有数据库加密)简化代码: If MessageBox.Show( "恢复数据库操作将清空数据库,确定是否清空?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes then DataTables("调资基础数据").DataRows.Clear() \'清空指定表数据 Else Return \'点击否终止代码的执行 End If Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "数据恢复" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) DecryptFile (dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) Dim mg As New Merger mg.SourcePath = dlg.filename mg.SourceTableName = "调资基础数据" mg.Format = "Access" mg. PassWord = "TZX_GWY_JT_8888" mg.DataTableName = "调资基础数据" mg.Merge() MessageBox.Show("数据恢复完成!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Question) FileSys.CopyFile(dlg.filename, dlg.filename & ".bak",False) FileSys.DeleteFile(dlg.filename, 2, 2) EncryptFile(dlg.filename & ".bak", dlg.filename, "8888") FileSys.DeleteFile(dlg.filename & ".bak", 2, 2) Else MessageBox.Show( "数据库已被清空!!!","提示",MessageBoxButtons. OK,MessageBoxIcon.Warning) End If |
-- 作者:lihe60 -- 发布时间:2011/7/14 9:29:00 -- 适合SQL吗? |
-- 作者:baoxyang -- 发布时间:2011/7/14 9:47:00 -- SQL有自动备份的。可以建立一个数据库维护计划,来实现定期备份。 |
-- 作者:zstk7333 -- 发布时间:2011/9/4 22:56:00 -- 好的,谢谢! |
-- 作者:yjk1023 -- 发布时间:2011/9/4 23:20:00 -- 收藏了 |
-- 作者:790729 -- 发布时间:2011/11/6 18:43:00 -- 收藏,谢谢! |
-- 作者:lyqwzdzdhan -- 发布时间:2012/9/19 20:56:00 -- 首先感谢2楼,代码对我帮助很大.但是我觉得2楼的恢复数据的代码有一点问题,如果在筛选器里没有找到自己想要的备份文件的话(例如在没有备份的情况下使用恢复),那样不但没有办法恢复数据,而且连数据库都删掉了,所以在2楼的基础上,我觉得应该修改一下,修改之后会首先显示筛选器,当用户选定备份文件点击打开之后才会出现清空数据库的选项,而且在这个时候用户还是可以选择取消,这样就不会出现一点错成万古恨的现象了,修改后的代码如下,请指正批评:
Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "备份文件|*.DBF" \'设置筛选器 dlg. title= "数据恢复" If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 If MessageBox.Show( "恢复数据库操作将清空数据库,确定是否清空?","提示",MessageBoxButtons. YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then DataTables("调资基础数据").DataRows.Clear() \'清空指定表数据 Else Return \'点击否终止代码的执行 End If Dim mg As New Merger mg.SourcePath = dlg.filename mg.SourceTableName = "调资基础数据" mg.Format = "Access" mg. PassWord = "" mg.DataTableName = "调资基础数据" mg.Merge() MessageBox.Show("数据恢复完成!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Question) Else MessageBox.Show( "数据库已被清空!!!","提示",MessageBoxButtons. OK,MessageBoxIcon.Warning) End If |