Foxtable(狐表)用户栏目专家坐堂 → 关联表数据怎样调用


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

主题:关联表数据怎样调用

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


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
关联表数据怎样调用  发帖心情 Post By: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时,怎么写代码?

我不知道是否把我的问题描述清楚了

请指教。



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
  发帖心情 Post By: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

谢谢


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


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

 呃,你的意思是 按照产品编号 分别统计 销售收入吧?

 直接用统计就行了吧?


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


加好友 发短信
等级:婴狐 帖子:8 积分:106 威望:0 精华:0 注册:2013/12/6 9:02:00
  发帖心情 Post By:2013/12/14 22:52:00 [只看该作者]

我的理解,其实数据关联和你编程没关系,关联表其实就是系统内部的一个编程而已,不是数据库的一部分。
你就正常查询数据表就行了。
Datatable的查询,就是select方法,和“for each 对象 in 对象组”  的配合使用。

Datatable是对象“表”,Datatables是对象(表)组。

Dim drs As List(Of DataRow)     '这个是行组(你可以理解为datarows)
drs = DataTables("订单").Select("[产品] = 'PD01' And [日期]= #1/4/1999#")     '这个就是选出符合条件的行。


Dim dr As DataRow    '这个就是行

For each dr in drs       '这句其实就是把drs行组的每一行都看一遍,dr就是行。

dr("字段名")    '这个就是具体这行对应字段的值的引用方法。


后面你就嵌套而已。





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


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
  发帖心情 Post By:2013/12/15 11:37:00 [只看该作者]

感谢

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


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
  发帖心情 Post By: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 怎样找数据的语句不熟悉。
谢谢



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
  发帖心情 Post By:2013/12/15 22:23:00 [只看该作者]

我试了上面给的程序,还是不行,我编了一个简单的例子,请把我上传的例子调出来。
先谢了。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.zip


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部
总数 11 1 2 下一页