Foxtable(狐表)用户栏目专家坐堂 → 如何实现近百张表的多表查询


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

主题:如何实现近百张表的多表查询

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


加好友 发短信
等级:幼狐 帖子:70 积分:1244 威望:0 精华:0 注册:2013/10/21 23:01:00
如何实现近百张表的多表查询  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4751 积分:34563 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2016/10/30 21:37:00 [只看该作者]

办法多多,上个例子得到的回答更快更准

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


加好友 发短信
等级:幼狐 帖子:70 积分:1244 威望:0 精华:0 注册:2013/10/21 23:01:00
  发帖心情 Post By:2016/10/30 21:58:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


 回到顶部
帅哥,在线噢!
y2287958
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4751 积分:34563 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4252 威望:0 精华:0 注册:2015/5/13 8:32:00
  发帖心情 Post By: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

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


加好友 发短信
等级:幼狐 帖子:70 积分:1244 威望:0 精华:0 注册:2013/10/21 23:01:00
  发帖心情 Post By:2016/10/31 0:08:00 [只看该作者]

谢谢

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


加好友 发短信
等级:幼狐 帖子:70 积分:1244 威望:0 精华:0 注册:2013/10/21 23:01:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2016/10/31 9:18:00 [只看该作者]

合并成一张表,否则以后查询慢到不行

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110563 积分:562705 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/31 11:07:00 [只看该作者]

8楼+1,加一列月份区分就可以了

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

 回到顶部