Foxtable(狐表)用户栏目专家坐堂 → 分页加载与流水账,代码问题,老师帮忙看下!


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

主题:分页加载与流水账,代码问题,老师帮忙看下!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 9:14:00 [显示全部帖子]

 把例子传上来。

 

 你只有修改了 结余 列,才会计算总库存的,表达式列不会触发 DataColChanged。表达式列如果要触发DataColChanged,看这里 http://www.foxtable.com/help/topics/2381.htm

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 11:37:00 [显示全部帖子]

 看了一下,不明白你为什么要做流水账?明明直接统计即可的。

 

1、删除结余列,入库数量和出库数量改成数据列

 

2、编写datacolchanged的代码

 

Select Case e.DataCol.Name
    Case "辅材编号"
        Dim filter As String = "辅材编号 = '" & e.DataRow("辅材编号") & "'"
        e.DataRow("入库数量") = DataTables("fucairuku").SQLCompute("sum(入库数量)", filter)
        e.DataRow("出库数量") = DataTables("fucairuku").SQLCompute("sum(出库数量)", filter)
        e.DataRow("库存总量") = e.DataRow("入库数量") - e.DataRow("出库数量")
End Select


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 11:48:00 [显示全部帖子]

以下是引用身份不明在2014-5-27 11:47:00的发言:

明白了,甜老师,绕了个弯路。可以不删除结余列统计吗?

 

可以,只是感觉多余。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 14:33:00 [显示全部帖子]

 第一:这段代码,需要你修改了辅材编号,或者重置列辅材编号,才能会统计的;

 

 第二:如果你希望做一个按钮重新统计,你就要用代码 Datatables("库存").DataCols("辅材编号").RaiseDataColChanged();

 

 第三:如果你希望修改了出库入库的数据以后,就马上重新统计,就需要在出库入库的datacolchanged写入必要代码,参考 http://www.foxtable.com/help/topics/1472.htm

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/28 15:45:00 [显示全部帖子]

 测试了一下,这样可能会快一些。

 

Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "Select 辅材编号, (Select sum(入库数量) from {fucairuku} As a where a.辅材编号 = c.辅材编号) - (Select sum(出库数量) from {fucaichuku} As a where a.辅材编号 = c.辅材编号) As 库存 from {fucai} As c"
Dim dt As DataTable = cmd.ExecuteReader
For Each dr As DataRow In DataTables("fucai").DataRows
    Dim fdr As DataRow = dt.Find("辅材编号 = '" & dr("辅材编号") & "'")
    If fdr IsNot Nothing Then
        dr("库存总量") = fdr("库存")
    Else
        dr("库存总量") = Nothing
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 14:43:00 [显示全部帖子]

 回复19楼,不可能,计算的代码肯定是正确的,请认真测试。入库、出库以后,把表保存以后,计算才会正确的。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 17:26:00 [显示全部帖子]

以下是引用身份不明在2014-5-29 17:18:00的发言:
甜老师,用这种统计方法,是不是可以不用设置表间关联了呢。

 

只要不需要用到表达式或者关联表,就可以不设置表间关联。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/30 9:33:00 [显示全部帖子]

以下是引用身份不明在2014-5-30 9:31:00的发言:

老师,在问个问题,如果我现在对库存进行分页加载后,每页加载10行,一共29页。

If MainTable.Name = "fucai" Then
    DataTables("fucai").DataCols("辅材编号").RaiseDataColChanged()
End If

 

用上述代码进行重新统计的时候,是不是只能统计第一页的数据呢。第二页第三页的数据都不是最新的吧,还是需要重新统计吗?

 

是的,都不是最新的。你可以在加载以后运行这句代码 DataTables("fucai").DataCols("辅材编号").RaiseDataColChanged()


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/30 10:11:00 [显示全部帖子]

以下是引用身份不明在2014-5-30 10:09:00的发言:
是不是没切换一页都要从新运行这句代码呢!如果是看29页的数据,就运行29次的代码。

 

嗯嗯,是的,在afterload事件写入这句代码。每看一页,就重新统计一次。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/30 10:21:00 [显示全部帖子]

那就增加一个查询表,用这样的sql语句,需要更新的时候,重新load一次。

 

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

 

Select 辅材编号, (Select sum(入库数量) from {fucairuku} As a where a.辅材编号 = c.辅材编号) - (Select sum(出库数量) from {fucaichuku} As a where a.辅材编号 = c.辅材编号) As 库存 from {fucai} As c


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