Foxtable(狐表)用户栏目专家坐堂 → 累计出库自动更新的问题?(已解决)


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

主题:累计出库自动更新的问题?(已解决)

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
累计出库自动更新的问题?(已解决)  发帖心情 Post By:2013/3/30 14:42:00 [显示全部帖子]

各位老师,关于累计出库的问题

为了简化问题,重新上传了例子,免得大家一看很多就不想看了。只有一个关键问题,

就是出库明细的数量改变时怎么样让订单明细的datacolchanged事件触发。(不论订单明细有没有加载)。
即下面这句出库明细中的代码要怎么写才能触发订单明细中的datacolchanged事件?(贴出的当然是不起作用的。)

If e.datacol.name  = "数量" Then 
     '先加载订单明细表中的数据
    Dim flt = "产品编码 = '" & e.DataRow("产品编码") & "' And 订单编号 = '" & e.DataRow("来源单号") & "'"
    DataTables("订单明细").Loadfilter = flt
    DataTables("订单明细").Load()
    
    Dim pr As DataRow ''触发事件更新累计出库
    pr = DataTables("订单明细").Find("[产品编码] = '" & e.DataRow("产品编码") & "'" & _
    "And 订单编号 = '" & e.DataRow("来源单号") & "'")
    If pr IsNot Nothing Then
        DataTables("订单明细").DataCols("产品编码").RaiseDataColChanged(pr)
    End If
    
End If


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:累计出库自动更新的问题.foxdb



谢谢!



[此贴子已经被作者于2013-4-1 15:28:49编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 15:48:00 [显示全部帖子]

谢谢二位,其实我要求也很简单,就是在订单明细的datachanged事件中的代码计算累计出库
Select Case e.DataCol.Name
    Case "产品编码","来源单号"
        '计算累计出库
        Dim flt1 As String = "[产品编码] = '" & e.NewValue & "'and [来源单号] = '" & e.DataRow("订单编号") & "'"
        Dim cmd As New Sqlcommand
        Dim sd As Single
        cmd.CommandText = "SELECT Sum(数量) From {出库明细} where " & flt1
        sd = cmd.ExecuteScalar()
        e.DataRow("累计出库") = sd     
End Select

而每次当出库明细中的数量改变时用订单明细中的下述代码触发一下订单明细中的事件即可。
Select Case e.DataCol.Name
    Case "数量"
        If e.OldValue <> e.NewValue Then  '如果数量改变重置生产明细中的列更新出库累计
            '先加载订单明细表中的数据
            Dim flt = "产品编码 = '" & e.DataRow("产品编码") & "' And 订单编号 = '" & e.DataRow("来源单号") & "'"
            DataTables("订单明细").Loadfilter = flt
            DataTables("订单明细").Load()
            
            Dim pr As DataRow ''触发事件更新累计出库
            pr = DataTables("订单明细").Find("[产品编码] = '" & e.DataRow("产品编码") & "'" & _
            "And 订单编号 = '" & e.DataRow("来源单号") & "'")
            If pr IsNot Nothing Then
                DataTables("订单明细").DataCols("产品编码").RaiseDataColChanged(pr)
            End If
        End If
End Select

关键是出库明细中的数量改变后订单明细中的累计出库没有改变,但若用手动重置列的就可以,请问一下是哪里出的问题啊?


[此贴子已经被作者于2013-3-30 15:49:47编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 15:59:00 [显示全部帖子]

我当然有测试过啦,显示是没问题的,就是事件不会触发,但若我在订单明细中的事件改为加载表的形式(蓝色的代码)就可以,但那样就会出现我说的一楼的问题了。

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 16:12:00 [显示全部帖子]

不行啊,你这种情况是累计总数是在出库明细表里的,而我是将累计出库设计在来源表中即订单明细中的。

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 16:34:00 [显示全部帖子]

谢谢,我看了一下你原来发的那几个贴,和我这个问题真的有点类似,我仔细看看再说了。其实我就想知道我5楼下面的代码为何没有触发事件。只要那个问题解决了,其他都没问题。

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 18:41:00 [显示全部帖子]

如果不考虑效率的话,我1楼那个当然是可行的,只要把
 DataTables("出库明细").LoadFilter = flt 改为
 DataTables("出库明细").LoadFilter = ""
即不要任何条件全部加载。这样的话在出库明细中更改数据时就不会出现我说的第3个问题,你在出库明细中随便怎么更改后台数据都是正确的。只要回到订单主表时订单主表及明细表的数据就重新加载成最新的了。

如果按你说的用update 语句在出库明细中直接更新订单明细中的累计出库的话
Dim flt2 As String = "[产品编码] = '" & e.DataRow("产品编码") & "' and 订单编号 = '" & e.DataRow("来源单号") & "'"
cmd.CommandText = "Update {订单明细} Set 累计出库 = " & sd & "+'" & e.DataRow & "'-'" & e.OldValue & "' where " & flt2
cmd.ExecuteNonQuery()

就会出现操作者如果每次更改数量后不保存又更改一次这样结果就不正确,如果每次都保存就没问题,不知我理解的是否正确?


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 19:46:00 [显示全部帖子]

奇怪,怎么就我们俩,难道其他人没有这种需求?我们这种想法太偏远了?

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 21:39:00 [显示全部帖子]

 暈了快扶我,我也暈了,還是把你的代碼帖出來學習一下吧,如果方便的話,謝謝!

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 21:43:00 [显示全部帖子]

謝謝,一看就倒,怎麼這麼多啊!

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 22:01:00 [显示全部帖子]

其实在订单明细里已经用了如下代码(按狐爸的指点):
Case "产品编码"
              '计算累计出库
        Dim flt1 As String = "[产品编码] = '" & e.NewValue & "'and [来源单号] = '" & e.DataRow("订单编号") & "'"
        Dim cmd As New Sqlcommand
        Dim sd As Single
        cmd.CommandText = "SELECT Sum(数量) From {出库明细} where " & flt1
        sd = cmd.ExecuteScalar()
        e.DataRow("累计出库") = sd
   只要在出库明细里的数量改变时能在后台触发一下这个代码就可以了。对狐爸来讲应该是轻而易举啊,怎么大家都回避这个问题,看来狐爸是忙着发布更新了吧。

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