以文本方式查看主题 - 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分钟,竟然连菜单栏也灰了, ![]() |
-- 作者: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,核对一下激活码。 |