以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  MUHUA,为什么打开这个表要3分钟甚至会死机?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=32432)

--  作者:zerov
--  发布时间:2013/5/2 11:50:00
--  MUHUA,为什么打开这个表要3分钟甚至会死机?
三个表,《合同档案》含所有合同信息500条数据,《进度应收明细》有所有回款数据,1000条数据。
     进度应收 500条数据,在项目事件MainTable中通过Filler填充,将所有合同档案的数据填充到《 进度应收 》中的合同编号,然后在《 进度应收 》中的(DataColChanged)通过代码把合同档案的合同金额、付款方式、客户名称等填过来,并根据“合同编号”,统计《 进度应收明细》的回款数据,为什么会死机呢?

(《进度应收》与《进度应收明细》、《回款明细》关联,并通过表达式计算应收金额、回款金额。

1、填充代码:

If MainTable.Name = "进度应收" Then
    Dim f As New Filler
    f.SourceTable = DataTables("合同档案")
    f.SourceCols = "合同编号"
    f.DataTable = DataTables("进度应收")
    f.DataCols = "合同编号"
    f.ExcludenullValue= True
    f.ExcludeExistValue=True
    f.Append=False
   
    f.Fill()
End If


2、根据合同编号填充项目名称、客户名称、合同金额等代码

If e.DataCol.Name = "合同编号" Then \'发生变化的是合同编号吗?在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("合同档案").Find("合同编号 = " & "\'" & e.DataRow("合同编号") & "\'" )
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("项目名称")= dr("项目名称")
        e.DataRow("客户名称")= dr("客户名称")
        e.DataRow("分公司")= dr("分公司")
        e.DataRow("年份")= dr("年份")
        e.DataRow("签约人")= dr("签约人")
        End If
End If

3、根据《进度应收明细》重置相关表,计算应收金额代码:



If DataTables("进度应收明细").HasChanges Then
    DataTables("项目总表").DataCols("合同编号").RaiseDataColChanged()
    DataTables("进度应收").DataCols("合同编号").RaiseDataColChanged()
    e.DataRow("日期")=Date.Today()
    e.DataRow("录入")=User.name()
End If
[此贴子已经被作者于2013-5-2 11:56:34编辑过]

--  作者:zerov
--  发布时间:2013/5/2 12:02:00
--  
我在怀疑,是不是因为关联计算,造成这么慢呢?
--  作者:zerov
--  发布时间:2013/5/2 12:29:00
--  
这次切换到《进度应收》表用了5分钟,竟然连菜单栏也灰了,图片点击可在新窗口打开查看


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


--  作者:zerov
--  发布时间:2013/5/2 17:11:00
--  
有高手不?


--  作者:Bin
--  发布时间:2013/5/2 17:12:00
--  
把例子发上来吧.不然很难排查原因.
--  作者:狐狸爸爸
--  发布时间:2013/5/2 17:15:00
--  

如果你在某个表的Datacolchanged事件中写上了下面的代码,那么慢才是正常的:

 

If DataTables("进度应收明细").HasChanges Then
    DataTables("项目总表").DataCols("合同编号").RaiseDataColChanged()
    DataTables("进度应收").DataCols("合同编号").RaiseDataColChanged()
    e.DataRow("日期")=Date.Today()
    e.DataRow("录入")=User.name()
End If

 

至于变灰,可能是激活码有误,可以联系客服QQ: 80014337,核对一下激活码。