Foxtable(狐表)用户栏目专家坐堂 → 如何遍历Access文中的所有表?


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

主题:如何遍历Access文中的所有表?

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


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
如何遍历Access文中的所有表?  发帖心情 Post By:2017/9/1 15:44:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看

Access文件,没有建立数据源。想从外部Access文件合并所需要的表,如何用代码读出这个Access文件内的所有表??
上图所示的文件,系统内部是用什么代码实现的?
[此贴子已经被作者于2017/9/1 15:45:08编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/1 17:16:00 [只看该作者]

参考

 

Dim dlg As  new OpenFileDialog
If dlg.ShowDialog = DialogResult.OK Then
    If Connections.Contains("test") Then Connections.Delete("test")
    Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dlg.FileName & ";Persist Security Info=False")
    For Each tn As String In Connections("test").GetTableNames
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.ConnectionName = "test"
        cmd.CommandText = "SELECT * From {" & tn & "}"
        dt = cmd.ExecuteReader()
        For Each dr As DataRow In dt.DataRows
            Dim fdr As DataRow = DataTables(tn).Find("主键列名 = '" & dr("主键列名") & "'")
            If fdr Is Nothing Then fdr = DataTables("员工").AddNew()
            For Each dc As DataCol In dt.DataCols
                fdr(dc.name) = dr(dc.name)
            Next
        Next
    Next
End If


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


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2017/9/1 17:18:00 [只看该作者]

我后来是这样做的,主要用于数据汇总。

Dim sum() As Integer   '定义新导入数据记录数
Dim sts() As String = {"特困人员表","直系亲属"}
Dim dlg As New OpenFileDialog
dlg.Filter = "Accese文件|*.mdb"
dlg.MultiSelect = True
dlg.Title = "请用鼠标单选或多选*.mdb格式的文件,然后点击确定"
If dlg.ShowDialog = DialogResult.Ok Then
    For Each File As String In dlg.FileNames     '遍历所选的Access文件名
        If Connections.Contains("newsql") Then     '判断是否存在某一数据源
            Connections.Delete("newsql")   '如果有就删除
        End If
        Connections.Add("newsql","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & file & ";Persist Security Info=False")   '把选择的Access文件新建一个数据源
        For Each st As String In sts   '遍历所在汇总的Table表名
            Dim  co As Connection = Connections("newsql")    '定义数据源
            If co.GetTableNames.contains(st) Then   '获取数据源中每个表名,而且表名与将汇总的表同名
                Dim mg As New Merger
                mg.SourcePath = file
                mg.SourceTableName = st
                mg.DataTableName = st
                StatusBar.Message1 = "      请耐心等待,系统正在导入数据……." &  " 正导入【" & file & "】…"
                Application.DoEvents()
                mg.Merge()
            End If
            DataTables(st).Save
        Next
        
    Next
End If

 回到顶部