以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关联表数据怎样调用 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=43741) |
||||
-- 作者:zhangc2000 -- 发布时间:2013/12/13 22:00:00 -- 关联表数据怎样调用 请问:我需要通过编程获取关联表中的数据,怎样处理? 如:主表A(企业信息)与关联表B(产品信息)通过企业编号进行关联,而表B与表C(产品销售情况)也是关联关系,通过产品编号关联。 我要在A表中选择查看产品销售情况,但不知使用怎样的语句。 在查看B表信息,我一般采用Find和Select语句(企业代码是从表A中传递过来的): If DataTables("表B").find("[企业代码] = 100001") IsNot Nothing Then drs = DataTables("表B").Select("[企业代码] = 100001l", "结算日期") 。。。 End If 由于关联字段不一样(表A和表B是企业代码,表B和表C是产品编号)那么,查看表C时,怎么写代码? 我不知道是否把我的问题描述清楚了 请指教。 |
||||
-- 作者:有点甜 -- 发布时间:2013/12/13 22:13:00 -- 方法一:在表C加一列 企业代码,和表A关联。 方法二:代码类似 If DataTables("表B").find("[企业代码] = 100001") IsNot Nothing Then drs = DataTables("表B").Select("[企业代码] = 100001l", "结算日期") For Each dr As DataRow In drs For Each cdr As DataRow In DataTables("表C").Select("产品编号 = \'" & dr("产品编号") & "\'") Next Next End If |
||||
-- 作者:zhangc2000 -- 发布时间:2013/12/14 16:40:00 -- 若采用方法二,我添加了绘图的一些代码,好像还有点问题,能否帮我看看: Dim n as Integer = 0
If DataTables("表B").find("[企业代码] = 100001") IsNot Nothing Then drs = DataTables("表B").Select("[企业代码] = 100001", "结算日期") For Each dr As DataRow In drs For Each cdr As DataRow In DataTables("表C").Select("产品编号 = \'" & dr("产品编号") & "\'") Series.X(i) = i Series.Y(i) = cdr("A产品销售收入") Chart.AxisX.SetValueLabel(i, cdr("结算日期")) i = i + 1 Next Next End If 谢谢 |
||||
-- 作者:有点甜 -- 发布时间:2013/12/14 22:37:00 -- 呃,你的意思是 按照产品编号 分别统计 销售收入吧? 直接用统计就行了吧? |
||||
-- 作者:horseroom -- 发布时间:2013/12/14 22:52:00 -- 我的理解,其实数据关联和你编程没关系,关联表其实就是系统内部的一个编程而已,不是数据库的一部分。 你就正常查询数据表就行了。 Datatable的查询,就是select方法,和“for each 对象 in 对象组” 的配合使用。 Datatable是对象“表”,Datatables是对象(表)组。 Dim drs As List(Of
DataRow) \'这个是行组(你可以理解为datarows) Dim dr As DataRow \'这个就是行 For each dr in drs \'这句其实就是把drs行组的每一行都看一遍,dr就是行。 dr("字段名") \'这个就是具体这行对应字段的值的引用方法。 后面你就嵌套而已。 |
||||
-- 作者:zhangc2000 -- 发布时间:2013/12/15 11:37:00 -- 感谢 |
||||
-- 作者:zhangc2000 -- 发布时间:2013/12/15 16:58:00 -- 我还是没有绕过来。 因为C表数据没有办法直接通过A表查询,它与A表没有直接关联,在设置Select方法时,不知道语句怎么写。
我的理解是:我首先要找到B表的信息,才能根据B表与C表的关系,找到C表的数据。但是写出的程序老说“未将对象引用设置到对象的实例”。程序如下: Dim zh As DataRow Dim drs As List(of DataRow) If e.Form.controls("产品名称").text IsNot Nothing Then ’从窗口组合框中选择产品名称 If DataTables("表B").find("[企业代码] = \'100001\'") IsNot Nothing Then ‘从表A传递过来企业编号100001 zh = DataTables("表B").find("[产品名称] = \'" & e.Form.controls("产品名称").text & "\'") ’找到表B中与窗口输入的产品相符的数据行 cdcpbh = zh("产品编号") \'传递产品编号 ‘将该数据行的与表C关联的产品编号字段传递 If DataTables("表C").find("[产品编号] = \'" & cdcpbh & "\'") IsNot Nothing Then drs = DataTables("主营产品业绩").Select("[产品编号] = \'" & cdcpbh & "\'","结算日期") ’找到所有符合的行 Dim i As Integer = 0 ‘下面是绘图部分 For Each dr As DataRow In drs Series.X(i) = i Series.Y(i) = dr("产品销售收入") Chart.AxisX.SetValueLabel(i, dr("结算日期")) \'指定字符表示 i = i + 1 Next Else MessageBox.Show("没有这个企业信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End If 帮我看一下,哪里错了。我感觉第四行好像不对,但也没有其他的方法传递数据。 另:是否可通过Table 的一些方法,将关联表的数据找到,而不需要通过DataTable。但我对Table 怎样找数据的语句不熟悉。 谢谢 |
||||
-- 作者:有点甜 -- 发布时间:2013/12/15 19:28:00 -- 我猜是这样写,实在不行,就上传一个例子吧。 Dim zh As DataRow Dim drs As List(of DataRow) If e.Form.controls("产品名称").text > "" Then \'从窗口组合框中选择产品名称 zh = DataTables("表B").find("[企业代码] = \'100001\' and [产品名称] = \'" & e.Form.controls("产品名称").text & "\'") \'找到表B中与窗口输入的产品相符的数据行 If zh IsNot Nothing Then \'从表A传递过来企业编号100001 Dim cdcpbh As String = zh("产品编号") \'传递产品编号 drs = DataTables("主营产品业绩").Select("[产品编号] = \'" & cdcpbh & "\'","结算日期") \'找到所有符合的行 If drs.Count > 0 Then Dim i As Integer = 0 \'下面是绘图部分 For Each dr As DataRow In drs Series.X(i) = i Series.Y(i) = dr("产品销售收入") Chart.AxisX.SetValueLabel(i, dr("结算日期")) \'指定字符表示 i = i + 1 Next Else MessageBox.Show("没有这个企业信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End If End If |
||||
-- 作者:zhangc2000 -- 发布时间:2013/12/15 22:23:00 -- 我试了上面给的程序,还是不行,我编了一个简单的例子,请把我上传的例子调出来。 先谢了。
|
||||
-- 作者:有点甜 -- 发布时间:2013/12/15 22:43:00 -- 打开例子,下面的代码 \'以下程序是需要将给定企业(100001)的指定产品的销售情况用图表展示出来 Dim jg As String = e.Form.controls("ComboBox1").text If jg > "" Then \'从窗口组合框中选择产品名称 Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表 Chart.SeriesList.Clear() \'清除图表原来的图系 Series = Chart.SeriesList.Add() \'增加一个图系 Chart.AxisX.ClearValueLabel \'清除所有通过SetValueLabel设置的数值字符标示 Chart.LegendVisible = False \'不显示图列 Dim drs As List(of DataRow) Dim zh As DataRow = DataTables("表B").find("[企业编号] = \'100001\' and [产品名称] = \'" & jg & "\'") \'找到表B中与窗口输入的产品相符的数据行 If zh IsNot Nothing Then \'从表A传递过来企业编号100001 Dim cdcpbh As String = zh("产品编号") \'传递产品编号 drs = DataTables("表C").Select("[产品编号] = \'" & cdcpbh & "\'","结算日期") \'找到所有符合的行 series.Length = drs.Count If drs.Count > 0 Then Dim i As Integer = 0 \'下面是绘图部分 For Each dr As DataRow In drs Series.X(i) = i Series.Y(i) = dr("销售收入") Chart.AxisX.SetValueLabel(i, dr("结算日期")) \'指定字符表示 i = i + 1 Next Chart.AxisX.AnnoWithLabels = True \'启用字符标示 Else MessageBox.Show("没有这个企业信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End If |