以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  表事件,计算编码问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92826)

--  作者:feixianzhi
--  发布时间:2016/11/14 13:29:00
--  表事件,计算编码问题
哪位老师帮忙看一下,下面的代码错在哪了:

Select Case e.DataCol.Name
    Case "供应商编码","借方","贷方"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [供应商编码] = \'" & mr("供应商编码") & "\'", "[_SortKey] Desc")
        If dr Is Nothing Then \'如果没有上一行,说明本行就是同产品的第一行
            mr("余额") = mr("借方") - mr("贷方")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [供应商编码] = \'" & dr("供应商编码") & "\'")
        For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方") - drs(i)("贷方")
        Next
End Select


运行后出现如下错误:




图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看


--  作者:feixianzhi
--  发布时间:2016/11/14 13:51:00
--  
请有点蓝老师帮忙。
--  作者:feixianzhi
--  发布时间:2016/11/14 14:18:00
--  
请各位老师帮忙呀,急用。
--  作者:有点蓝
--  发布时间:2016/11/14 14:47:00
--  
如果是外部表,可能没有_SortKey列,增加一下,勾上插入标志

http://www.foxtable.com/webhelp/scr/1791.htm

或者更改为其它可以排序的列,如_Identify等

--  作者:feixianzhi
--  发布时间:2016/11/14 14:58:00
--  
有点蓝老师,更改后不出错误提示了。但表有13万多行,怎么重置列后就死机了。
--  作者:有点蓝
--  发布时间:2016/11/14 15:07:00
--  
这么多数据,这种计算,假死是正常的。等一段时间看看能不能计算完毕。不然就分段计算吧,分也加载分年、月顺序进行计算
--  作者:feixianzhi
--  发布时间:2016/11/14 15:22:00
--  
谢谢有点蓝老师。
--  作者:有点青
--  发布时间:2016/11/14 16:24:00
--  
以下是引用feixianzhi在2016/11/14 14:58:00的发言:
有点蓝老师,更改后不出错误提示了。但表有13万多行,怎么重置列后就死机了。

 

重置列没必要全部行重置一次。根据你写的代码,只需要把不同供应商编号的第一行重置即可。如代码

 

Dim dt As DataTable = DataTables("表A")
For Each gys As String In dt.GetValues("第一列")
    dt.datacols("第一列").RaiseDataColChanged(dt.Find("第一列 = \'" & gys & "\'", "_sortkey"))
Next

 

 


--  作者:feixianzhi
--  发布时间:2016/11/15 7:33:00
--  
麻烦问一下有点青老师,你这段代码放在哪里呀。能给出完整代码吗。谢谢。
--  作者:有点蓝
--  发布时间:2016/11/15 8:30:00
--  
命令窗口执行,或者按钮事件