Foxtable(狐表)用户栏目专家坐堂 → 求助:利用代码实现了遍历表然后全部导出为一个数据库 现在怎么反过来进行恢复操作呢?怎么操作都没有成功


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

主题:求助:利用代码实现了遍历表然后全部导出为一个数据库 现在怎么反过来进行恢复操作呢?怎么操作都没有成功

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
求助:利用代码实现了遍历表然后全部导出为一个数据库 现在怎么反过来进行恢复操作呢?怎么操作都没有成功  发帖心情 Post By:2015/1/15 11:55:00 [显示全部帖子]

For Each dt As DataTable In DataTables
    If dt.Type=1 OrElse dt.Type =3 Then
        output.show(dt.name)
        Dim ex As New Exporter
        ex.SourceTableName = dt.name '指定导出表
        ex.filepath = "c:\Data\订单.mdb" '指定目标文件
        ex.Export()
    End If
Next

 

 

示例二

如果希望出现一个打开文件对话框,导入用户指定的文件,可以参考下面的代码:

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim ip As New Importer
    ip.SourcePath = dlg.FileName '指定数据文件
    ip.SourceTableName = "订单" '指定要导入的表
    ip.NewTableName ="订单" '导入后的表名
    ip.Import()
End If


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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)你要用合并,而不是导入http://www.foxta...  发帖心情 Post By:2015/1/15 11:57:00 [显示全部帖子]

合并也无从下手 因为数据库中含有多个表

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)遍历一下数据库中的表即可for each dt a...  发帖心情 Post By:2015/1/15 14:49:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    For Each dt As DataTable In DataTables
        Dim ip As New Importer
        ip.SourcePath = dlg.FileName '指定数据文件
        ip.SourceTableName = dt.name '指定要导入的表
        ip.NewTableName =dt.name '导入后的表名
        ip.Import()
    Next
End If

这样操作只能将项目中已经存在的表进行遍历导入
比如项目已经有了表A B C  所选择的数据库假设有不表A B C D  E 余下的 D E无法导入

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(Bin)你要用合并,而不是导入http://www.foxta...  发帖心情 Post By:2015/1/15 14:52:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    For Each dt As DataTable In DataTables
        
        Dim mg As New Merger
        mg.SourcePath = dlg.FileName
        mg.SourceTableName = dt.name
        mg.DataTableName = dt.name
        mg.Merge()
    Next
End If

如果是合并 同样遇见一个问题 那就是选择的数据库没有对应的表 也无法合并 比如数据库没有表ABC 那么合并也无法进行!

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜) 没必要这样导出导入啊。&nbs...  发帖心情 Post By:2015/1/15 15:01:00 [显示全部帖子]

想学习一下思路
因为项目在编写时候 有部分是ACC有部分是SQL 然后两个数据库的表不一样 所以我想实现项目所有表都备份  这个目前已经实现

现在我想进行数据导入 求解!



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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜) 动态添加数据源,取出表名&n...  发帖心情 Post By:2015/1/15 15:12:00 [显示全部帖子]

有点甜老师 楼上两个外部数据源好像只能是项目已设定了的项目数据源吧 

对于需要导入的数据库源相关表数据 能不能读哦

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜) 动态添加数据源,然后获取表名...  发帖心情 Post By:2015/1/15 15:54:00 [显示全部帖子]

代码如下:
Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\订单.mdb;Persist Security Info=False")


Dim lst As List(Of String)
lst = Connections("test").GetTableNames
For Each nm As String In lst
    Output.Show(nm)
    Dim ip As New Importer
    ip.SourcePath = "C:\data\订单.mdb" '指定数据文件
    ip.SourceTableName = nm '指定要导入的表
    ip.NewTableName =nm '导入后的表名
    ip.Import()
Next


经过在命令窗口中进行测试  能够顺利导入所有的表及数据  

现在遇见一个极端问题 假设这个数据库是10号备份的  那么项目中已经有了类似的数据表及部分数据,再次运行上面的代码会出现提示已经存在同名数据源及表,系统决绝导入, 有没有办法强制导入呢?

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜) 根据datatables判断是否存在,...  发帖心情 Post By:2015/1/15 16:27:00 [显示全部帖子]

有点甜老师  我做了如下修改:
在命令窗口中运行 无法进行判断红色部分代码  因为没有实际存在TEST

求纠正 这个命令再次运行的时候 判断不存在TESE 则进行动态添加数据源  若存在就直接合并数据



For Each cn As Connection In Connections
    Output.Show("名称:" & cn.Name)
    Output.Show("链接字符串:" & cn.ConnectionString)

If cn.name <> "test" Then
    Dim lst As List(Of String)
    lst = Connections("test").GetTableNames
    For Each nm As String In lst
        If DataTables.Contains(nm) '如果存在统计表1
            Dim mg As New Merger
            mg.SourcePath = "c:\data\订单.mdb"
            mg.SourceTableName = nm
            mg.DataTableName = nm
            mg.Merge()
        Else
            Dim ip As New Importer
            ip.SourcePath = "C:\data\订单.mdb" '指定数据文件
            ip.SourceTableName = nm '指定要导入的表
            ip.NewTableName =nm '导入后的表名
            ip.Import()
        End If
    Next
Else
    Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\订单.mdb;Persist Security Info=False")
End If


Next





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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜) 根据datatables判断是否存在,...  发帖心情 Post By:2015/1/15 16:29:00 [显示全部帖子]

进一步学习一下

项目是否可以在项目属性里面添加如下代码不  让项目启动的时候进行加载   就不在数据源管理去手动设置了
Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\订单.mdb;Persist Security Info=False")

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜)?思路错了,写在上面?...  发帖心情 Post By:2015/1/15 16:37:00 [显示全部帖子]

已经完美  谢谢 
代码如下,供其他同学学习和参考!
If Connections.Contains("Test") = False Then
    Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\订单.mdb;Persist Security Info=False")
    
    Dim lst As List(Of String)
    lst = Connections("test").GetTableNames
    For Each nm As String In lst
        If DataTables.Contains(nm) '如果存在统计表1
            Dim mg As New Merger
            mg.SourcePath = "c:\data\订单.mdb"
            mg.SourceTableName = nm
            mg.DataTableName = nm
            mg.Merge()
        Else
            Dim ip As New Importer
            ip.SourcePath = "C:\data\订单.mdb" '指定数据文件
            ip.SourceTableName = nm '指定要导入的表
            ip.NewTableName =nm '导入后的表名
            ip.Import()
        End If
    Next
End If


如果是SQL数据库 是不是直接更换上面的红色部分为SQL连接字符串即可呢?

[此贴子已经被作者于2015-1-15 16:38:09编辑过]

 回到顶部
总数 20 1 2 下一页