以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于财务帐的余额问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=23359)

--  作者:taiguhsx2009
--  发布时间:2012/9/10 9:32:00
--  关于财务帐的余额问题
我做了一个财务小系统,其中有一个表为“记帐凭证明细表”用于存储所有记帐凭证的详细内容,表内有18000余行记录。另一个为“明细帐表”用于从“记帐凭证表”中提取某往来单位的相关往记录,表中有一“余额”列,用于计算往来帐的及时余额,某一单位往来有5500余行,计算时间用了大约6-7分钟。太慢了!

--  作者:taiguhsx2009
--  发布时间:2012/9/10 9:42:00
--  

DataColChanged事件设为:

If e.DataCol.Name = "日期" Then
      For Each dr As DataRow In e.DataTable.Select("[_SortKey] >= " & e.DataRow("_SortKey"))
            Dim Val1 As Double = e.DataTable.Compute("Sum(借方金额)","[_SortKey] <= " & dr("_SortKey"))
            Dim Val2 As Double = e.DataTable.Compute("Sum(贷方金额)","[_SortKey] <= " & dr("_SortKey"))
            dr("余额") = Val1 - Val2
        Next

End If

按钮的代码为:

If MainTable.Name = "金额明细帐" Then
    Dim f As New Filler
    DataTables("金额明细帐").DataRows.Clear() \'清除原有数据
    f.SourceTable = DataTables("凭证库")
    f.SourceCols = "日期,凭证号,摘要,借方数量,借方金额,贷方数量,贷方金额"
    f.DataTable = DataTables("金额明细帐")
    f.DataCols = "日期,凭证号,摘要,借方数量,借方金额,贷方数量,贷方金额"
    f.Filter = ("[子目] = \'"& vars("dwmc") & "\'")
    f.Fill()
End If
If MainTable.Name = "金额明细帐" Then
    DataTables("金额明细帐").DataCols("借方数量").RaiseDataColChanged()
End If
With DataTables("金额明细帐")
    .DataCols("日期").RaiseDataColChanged(.DataRows(0))
End With


--  作者:taiguhsx2009
--  发布时间:2012/9/10 9:50:00
--  

代码中的“dwmc“为一个变量,记录往来单位名称,请高手邦忙。


--  作者:taiguhsx2009
--  发布时间:2012/9/10 10:05:00
--  

把下面的代码删后,还需2分多钟

If MainTable.Name = "金额明细帐" Then
    DataTables("金额明细帐").DataCols("借方数量").RaiseDataColChanged()
End If


--  作者:czy
--  发布时间:2012/9/10 10:06:00
--  
DataColChanged事件也在明细表吗?
--  作者:taiguhsx2009
--  发布时间:2012/9/10 10:08:00
--  
DataColChanged在金额明细帐中
--  作者:czy
--  发布时间:2012/9/10 10:10:00
--  
在按钮代码中关闭DataColChanged事件看看能改观多少
--  作者:狐狸爸爸
--  发布时间:2012/9/10 13:04:00
--  

C版说得对,填充数据的时候,关闭DataColChanged事件。
看看:

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

 

[此贴子已经被作者于2012-9-10 13:08:04编辑过]

--  作者:taiguhsx2009
--  发布时间:2012/9/10 15:20:00
--  
关闭事件代码后计算时间还需1分52秒,还是有点慢,如果填充数据再大点话,肯定还要再慢很多。
--  作者:狐狸爸爸
--  发布时间:2012/9/10 15:50:00
--  

看看是不是这个原因:

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