以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何遍历Access文中的所有表?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=106074)

--  作者:lmlptj
--  发布时间:2017/9/1 15:44:00
--  如何遍历Access文中的所有表?

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

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

--  作者:有点甜
--  发布时间: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
--  发布时间: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