以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何实现近百张表的多表查询  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92270)

--  作者:小广
--  发布时间:2016/10/30 21:16:00
--  如何实现近百张表的多表查询
有近百张每个月的数据表,每张表的结构都是一样的,现在要新建表A,希望在表A中输入姓名,实现把其余所有表中的数据提取到表A中。
因为数据表太多了,不能逐个建立关联吧,大家看看在表A  datacolchanged事件中写的代码,
1、哪里出错?     2、还有如何实现按月份逐行提取?
For Each dt As DataTable In DataTables
    Dim dr As DataRow
    dr = dt.Find("dt.datacols("姓名") = e.DataRow("姓名")")
    If dr IsNot Nothing Then
        e.DataRow("数量") = dr(dt.dataCols("数量"))
    End If
Next
 
数据表太多,没有一一导入,做了个例子,代码因为错误,无法保存在事件代码中。
          
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目2.table

[此贴子已经被作者于2016/10/30 21:59:57编辑过]

--  作者:y2287958
--  发布时间:2016/10/30 21:37:00
--  
办法多多,上个例子得到的回答更快更准
--  作者:小广
--  发布时间:2016/10/30 21:58:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


--  作者:y2287958
--  发布时间:2016/10/30 22:41:00
--  
Dim dic As new Dictionary(of String,String)
For Each dt As DataTable In DataTables
    If dt.Name <> "表A"
        dic.Add(dt.Caption,dt.Name)
    End If
Next
Select Case e.DataCol.Name
    Case "姓名","月份"
        If e.DataRow.IsNull("月份") = False
            Dim dr As DataRow = DataTables(dic(e.DataRow("月份"))).find("姓名=\'" & e.DataRow("姓名") & "\'")
            If dr IsNot Nothing
                e.DataRow("数量") = dr("数量")
            End If
        Else
            e.DataRow("数量") = Nothing
        End If
End Select
[此贴子已经被作者于2016/10/30 22:48:01编辑过]

--  作者:cbt
--  发布时间:2016/10/30 22:46:00
--  
 Dim name As String="张三"
DataTables("表A").DeleteFor("")
For Each dt As DataTable In DataTables
    If dt.name = "表A" Then
        Continue For
    End If
    Dim dr As DataRow = dt.Find("姓名=\'" & name & "\'")
    If dr IsNot Nothing Then
        Dim dr2 As DataRow = DataTables("表A").AddNew()
        dr2("姓名")=name
        dr2("月份")=dt.Caption
        dr2("数量")=dr("数量")
    End If
Next
--  作者:小广
--  发布时间:2016/10/31 0:08:00
--  
谢谢
--  作者:小广
--  发布时间:2016/10/31 0:13:00
--  
以下是引用cbt在2016/10/30 22:46:00的发言:
 Dim name As String="张三"
DataTables("表A").DeleteFor("")
For Each dt As DataTable In DataTables
    If dt.name = "表A" Then
        Continue For
    End If
    Dim dr As DataRow = dt.Find("姓名=\'" & name & "\'")
    If dr IsNot Nothing Then
        Dim dr2 As DataRow = DataTables("表A").AddNew()
        dr2("姓名")=name
        dr2("月份")=dt.Caption
        dr2("数量")=dr("数量")
    End If
Next

这段代码好像不能写在datacolchanged事件中,运行会退出foxtable。

Dim dr2 As DataRow = DataTables("表A").AddNew()
        dr2("姓名")=name

重新激活了datacolchanged事件吧

写在锁定行事件中就不会出现这个问题


--  作者:jspta
--  发布时间:2016/10/31 9:18:00
--  
合并成一张表,否则以后查询慢到不行
--  作者:有点蓝
--  发布时间:2016/10/31 11:07:00
--  
8楼+1,加一列月份区分就可以了

5楼的代码适合在按钮事件处理