Foxtable(狐表)用户栏目专家坐堂 → 一个逻辑的问题,请老大帮忙.


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

主题:一个逻辑的问题,请老大帮忙.

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 13:33:00 [显示全部帖子]

你交代的逻辑很清晰了,按顺序编码就行:

 

1、潜在客户表输入开单日期和系统单号之后,根据这两列内容,从促销价格表找出相同系统单号,且促销时间从小于等于开打日期,促销时间至大于等于开单日期的行,保存在dr1中

2、如果dr1不为空,那么根据dr1的系统单号,那么逐行遍历潜在客户明细表,根据每行系统单号和商品编码,从促销价格明细表找出销售类别,如果找到,取销售类别,如果没有找到,根据商品编码从标准标准表取销售类别。

3、如果dr1为空,那么逐行遍历潜在客户明细表,根据每行商品编码从标准价格表中取得销售类表。

 

取后台明细数据 ,可以用ExecuteReader方法:

http://www.foxtable.com/help/topics/0696.htm

 

[此贴子已经被作者于2011-12-9 13:33:37编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 14:43:00 [显示全部帖子]

我感觉没有什么复杂的啊。

请做好这四个表,输入一些测试数据,然后用一条数据告诉我们实际的检索过程。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 14:59:00 [显示全部帖子]

你应该多输入一些数据,然后用一两条具体的数据,说明你的工作流程,也就是检索数据的过程。

[此贴子已经被作者于2011-12-9 15:01:09编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 16:44:00 [显示全部帖子]

很用心的帮你写了,希望能仔细体会:

 

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


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 16:56:00 [显示全部帖子]

以下是引用blackzhu在2011-12-9 16:50:00的发言:
老大,你还是用了SQL语句了.

 

不用SQL可以的,直接用:

http://www.foxtable.com/help/topics/2314.htm

 

我代码中的SQL语句其实是用这个生成的,我SQL不熟悉的,用SQL是希望代码看上去短一点。

另外,做大型的系统,掌握一点SQL是很有帮助的,至少帮助文件中《SQL相关》这一章要精通。

[此贴子已经被作者于2011-12-9 16:57:36编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 17:01:00 [显示全部帖子]

1、你自己说没有加载数据,要用SQL的。

2、两个关联都可以删除的,只需调整一行代码就行:

 

 

Dim dr As DataRow = e.DataRow '当前行
Dim pr As DataRow = DataTables("潜在客户").Find("系统单号 = '" & dr("系统单号") & "'")
If pr Is Nothing Then
    Return
End If
Select Case e.DataCol.name
    Case  "系统单号","商品编码"
        If dr.IsNull("系统单号") OrElse dr.IsNull("商品编码") Then
            dr("销售类别") = Nothing
            Return          
        End If
        Dim dt As Date = pr("开单日期")
        Dim cmd As new SQLCommand
        Dim sql As String  = "Select Top 1 销售类别 From {促销价格表明细} Inner JOIN {促销价格表} ON {促销价格表}.[系统单号] = {促销价格表明细}.[系统单号]"
        sql = sql & "Where 促销时间从 <= #"  & dt & "# And 促销时间至 >= #" & dt & "# And {促销价格表明细}.系统单号 = '" & dr("系统单号") & "' Order by 促销时间从"
        cmd.CommandText = sql
        dr("销售类别") = cmd.ExecuteScalar
        If dr.IsNull("销售类别") Then '如果没有找到,也就是销售类别为空
            Dim dr1 As DataRow = DataTables("标准价格表").Find("商品编码 = '" & dr("商品编码") & "'")
            If dr1 IsNot Nothing Then
                dr("销售类别") = dr1("销售类别")
            End If
        End If
End Select

[此贴子已经被作者于2011-12-9 17:01:12编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 18:01:00 [显示全部帖子]

你总的有个查找的条件吧,否则二者凭什么联系起来啊?

所以我反复强调: 你最好用实际的一两条数据,说明你的工作流程,也就是检索数据的流程。

 

如果不是根据系统单号,而是根据商品编码,代码改为:

 

Dim dr As DataRow = e.DataRow '当前行
Dim pr As DataRow = e.DataRow.GetParentRow("潜在客户") '获得潜在客户表对应的行,也就是父行
If pr Is Nothing Then
    Return
End If
Select Case e.DataCol.name
    Case  "系统单号","商品编码"
        If dr.IsNull("系统单号") OrElse dr.IsNull("商品编码") Then
            dr("销售类别") = Nothing
            Return          
        End If
        Dim dt As Date = pr("开单日期")
        Dim cmd As new SQLCommand
        Dim sql As String  = "Select Top 1 销售类别 From {促销价格表明细} Inner JOIN {促销价格表} ON {促销价格表}.[系统单号] = {促销价格表明细}.[系统单号]"
        sql = sql & "Where 促销时间从 <= #"  & dt & "# And 促销时间至 >= #" & dt & "# And {促销价格表明细}.商品编码 = '" & dr("商品编码") & "' Order by 促销时间从"
        cmd.CommandText = sql
        dr("销售类别") = cmd.ExecuteScalar
        If dr.IsNull("销售类别") Then '如果没有找到,也就是销售类别为空
            Dim dr1 As DataRow = DataTables("标准价格表").Find("商品编码 = '" & dr("商品编码") & "'")
            If dr1 IsNot Nothing Then
                dr("销售类别") = dr1("销售类别")
            End If
        End If
End Select

[此贴子已经被作者于2011-12-9 18:07:57编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/9 23:03:00 [显示全部帖子]

还应该改一下,因为应该取最新日期的促销价格明细,而不是最早的:

 

Dim dr As DataRow = e.DataRow '当前行
Dim pr As DataRow = e.DataRow.GetParentRow("潜在客户") '获得潜在客户表对应的行,也就是父行
If pr Is Nothing Then
    Return
End If
Select Case e.DataCol.name
    Case  "系统单号","商品编码"
        If dr.IsNull("系统单号") OrElse dr.IsNull("商品编码") Then
            dr("销售类别") = Nothing
            Return          
        End If
        Dim dt As Date = pr("开单日期")
        Dim cmd As new SQLCommand
        Dim sql As String  = "Select Top 1 销售类别 From {促销价格表明细} Inner JOIN {促销价格表} ON {促销价格表}.[系统单号] = {促销价格表明细}.[系统单号]"
        sql = sql & "Where 促销时间从 <= #"  & dt & "# And 促销时间至 >= #" & dt & "# And {促销价格表明细}.商品编码 = '" & dr("商品编码") & "' Order by 促销时间从 Desc"
        cmd.CommandText = sql
        dr("销售类别") = cmd.ExecuteScalar
        If dr.IsNull("销售类别") Then '如果没有找到,也就是销售类别为空
            Dim dr1 As DataRow = DataTables("标准价格表").Find("商品编码 = '" & dr("商品编码") & "'")
            If dr1 IsNot Nothing Then
                dr("销售类别") = dr1("销售类别")
            End If
        End If
End Select


 回到顶部