以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  表中的代码怎么转换为按钮中的代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=88307)

--  作者:kaituozhe
--  发布时间:2016/7/31 13:01:00
--  表中的代码怎么转换为按钮中的代码

以下代码只能处理当前行的数据,如果处理几万行,该怎么办?

Dim er As Row = Tables("表A").current
Dim dr As DataRow = er.table.datatable.Find("[_SortKey] < " & er("_SortKey"), "[_SortKey] Desc") \'找出上一行
If dr Is Nothing Then
    er("借贷方") = "贷"
Else
    If er("余额") > dr("余额")
        er("借贷方") = "贷"
    Else
        er("借贷方") = "借"
    End If
End If

If er("借贷方") = "贷" Then
    er("贷方金额") = er("交易金额")
Else
    er("借方金额") = er("交易金额")
End If

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


--  作者:kaituozhe
--  发布时间:2016/7/31 13:01:00
--  
例子中的银行转换窗口
--  作者:大红袍
--  发布时间:2016/7/31 15:08:00
--  
Dim dr As DataRow = Nothing
For Each er As DataRow In DataTables("银行明细").Select("", "_sortkey")
    If dr Is Nothing Then
        er("借贷方") = "贷"
    Else
        If er("余额") > dr("余额")
            er("借贷方") = "贷"
        Else
            er("借贷方") = "借"
        End If
    End If
   
    If er("借贷方") = "贷" Then
        er("贷方金额") = er("交易金额")
    Else
        er("借方金额") = er("交易金额")
    End If
    dr = er
   
Next

--  作者:kaituozhe
--  发布时间:2016/7/31 17:43:00
--  
这个代码是否有办法改进,效率太低了,5000行的数据至少得半个小时
--  作者:大红袍
--  发布时间:2016/7/31 18:15:00
--  

 不可能。如果慢,说明你datacolchanged事件有问题。可以加上屏蔽的代码

 

SystemReady = False

 

代码

 

SystemReady = True


--  作者:kaituozhe
--  发布时间:2016/8/2 12:23:00
--  

以下代码那里错了,只能计算表第一行的,怎么样修改?

Dim v2 As Double

Dim v1 As Double
Dim dr As DataRow = Nothing
For Each er As DataRow In DataTables("银行现金汇总").Select("", "_sortkey")
    If dr Is Nothing Then
        If er.IsNull("交易户名") = False AndAlso er.IsNull("涉及人员") = False Then
            Dim nms1() As String = er("交易户名").Split(",") \'将工号列内容拆分成数组
            Dim nms2() As String = er("涉及人员").Split(",") \'将工号列内容拆分成数组
            For Each nm1 As String In nms1 \'遍历参与加工此产品的每个工号
                For Each nm2 As String In nms2 \'遍历参与加工此产品的每个工号
                    v1 = v1 + DataTables("银行明细").sqlCompute("sum(借方金额)","对方户名 = \'"& nm1 & "\'and 交易户名 = \'" & nm2 & "\'and 交易日期 >= \'" & er("开始日期") &"\'and 交易日期 <= \'" & er("截止日期") &"\'")
                    v2 = v2 + DataTables("银行明细").sqlCompute("sum(贷方金额)","对方户名 = \'"& nm1 & "\'and 交易户名 = \'" & nm2 & "\'and 交易日期 >= \'" & er("开始日期") &"\'and 交易日期 <= \'" & er("截止日期") &"\'")
                Next
            Next
            er("银行交易_借方金额") = v1
            er("银行交易_贷方金额") = v2
        End If
    End If
    dr = er
Next


--  作者:狐狸爸爸
--  发布时间:2016/8/2 12:35:00
--  
 代码看不出问题,你可以用MessageBox跟踪调试一下。

--  作者:大红袍
--  发布时间:2016/8/2 18:51:00
--  
 回复6楼,代码没有问题的。上传实例测试。