Foxtable(狐表)用户栏目专家坐堂 → 如何通过一个自制按键实现数据备份与恢复


  共有12255人关注过本帖树形打印复制链接

主题:如何通过一个自制按键实现数据备份与恢复

帅哥哟,离线,有人找我吗?
zstk7333
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:321 积分:2903 威望:0 精华:0 注册:2011/5/3 20:21:00
如何通过一个自制按键实现数据备份与恢复  发帖心情 Post By:2011/7/14 8:56:00 [只看该作者]

我想在我的程序界面的主菜单上制作两个按键,分别是数据备份和数据恢复,想请教一下,可否给出一个代码?谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
雨中的泪
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1432 积分:9061 威望:0 精华:0 注册:2009/8/19 8:19:00
  发帖心情 Post By:2011/7/14 9:27:00 [只看该作者]

 

(五)、<备份数据>按钮代码:

Dim dlg As New SaveFileDialog   '指定一个新的SaveFileDialog
dlg.Filter= "备份文件|*.DBF "   '设置筛选器

dlg. title= "备份数据"
dlg.OverwritePrompt = True  '对于已经存在的文件名,是否出现覆盖警告

If dlg.ShowDialog = DialogResult.Ok Then   '如果用户单击了确定按钮

If FileSys.FileExists(dlg.filename) Then    '如果指定的文件存在
    FileSys.DeleteFile(dlg.filename,2,2)     '则彻底删除之
    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()    '开始导出数据
    MessageBox.Show(备份数据生成完成!!!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information)
End If

 

修改代码(带有数据库加密):

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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6809 积分:43063 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2011/7/14 9:29:00 [只看该作者]

适合SQL吗?


 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2011/7/14 9:47:00 [只看该作者]

SQL有自动备份的。可以建立一个数据库维护计划,来实现定期备份。

 回到顶部
帅哥哟,离线,有人找我吗?
zstk7333
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:321 积分:2903 威望:0 精华:0 注册:2011/5/3 20:21:00
  发帖心情 Post By:2011/9/4 22:56:00 [只看该作者]

好的,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
yjk1023
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:189 积分:1658 威望:0 精华:0 注册:2011/5/25 17:51:00
  发帖心情 Post By:2011/9/4 23:20:00 [只看该作者]

收藏了

 回到顶部
帅哥哟,离线,有人找我吗?
790729
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:5 积分:96 威望:0 精华:0 注册:2011/11/6 13:34:00
  发帖心情 Post By:2011/11/6 18:43:00 [只看该作者]

收藏,谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
lyqwzdzdhan
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:1 积分:71 威望:0 精华:0 注册:2012/9/18 19:45:00
  发帖心情 Post By: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


 回到顶部