Dim st As Date = Date.Now
Dim log As String = ""
Dim r As Row = Tables("TbMod").Current
DataTables("TbModD").loadfilter = "ModID = '" & r("ID") & "'" '‘TbModD的数据大约有7000行
DataTables("TbModD").load()
If DataTables("TbModD").Find("ModID = '" & r("ID") & "'") IsNot Nothing Then
output.Show("找到明细,开始执行程序")
tv.StopRedraw
t.StopRedraw
output.Show("开始清除WBSL的表达式")
Dim cns As String = "A,C,LC,P,PC,SC,T,U,FMV"
For Each c As String In cns.Split(",")
DataTables("WBSL").DataCols(c).Expression = ""
Next
output.Show("开始构建UnitWL")
Dim dt As DataTable = Functions.Execute("UnitWL",4,"PM")
log & = "构表耗时: " & (Date.Now - st).TotalSeconds & "秒" & vbcrlf
log & = "Temp表的数据行=" & dt.DataRows.Count & vbcrlf
output.Show("开始计算明细WBSID序列")
Dim xs As List(of String) = dt.GetValues("WBSID") '获得变更明细对应的WBSID序列
log & = "明细WBSID序列耗时: " & (Date.Now - st).TotalSeconds & "秒" & vbcrlf
Dim OWBS As new List(of DataRow)
If xs.Count > 0 Then
output.Show("明细WBSID行数不为0,开始计算末级WBSC序列")
Dim wcs As new List(of String)
For Each x As String In xs
Dim dr As DataRow = DataTables("TbWBS").Find("ID = '" & x & "'")
If dr IsNot Nothing Then
wcs.Add(dr("C"))
End If
Next
log & = "末级WBSC序列耗时: " & (Date.Now - st).TotalSeconds & "秒" & vbcrlf
If wcs.Count > 0 Then
output.Show("末级WBSC序列不为0,开始计算WBSC序列")
Dim zs As List(of String) = Functions.Execute("CArray",wcs,".",1,2) ’这是我自定义的函数
log & = "所有WBSC序列耗时: " & (Date.Now - st).TotalSeconds & "秒" & vbcrlf
output.Show("开始计算所有WBSDR")
For Each z As String In zs
Dim dr As DataRow = DataTables("TbWBS").Find("C = '" & z & "'")
If dr IsNot Nothing Then
OWBS.Add(dr) ‘OWBS的数据大约有8000行左右
End If
Next
log & = "所有WBSDR序列耗时: " & (Date.Now - st).TotalSeconds & "秒,所有序列长度=" & owbs.Count & vbcrlf
‘Dim xyz As String = ""
’For Each dr As DataRow In owbs
‘xyz &= dr("ID") & chr(9)
’Next
‘output.Show("所有的WBSID为" & xyz) ’如果这段代码不注释掉,整个代码执行都没有问题,TbMod表目前有10行,都顺利执行完成。
output.Show("开始给涉及WBSDR赋值") ‘这行信息显示之后,报出错误“未将对象引用设置到对象的实例”,但勾选查看详细,又没具体说明
systemready = False
For Each dr As DataRow In owbs
dr("Temp") = True
Next
systemready = True
log & = "WBSID序列的Temp列赋值耗时: " & (Date.Now - st).TotalSeconds & "秒,需要计算的数据=" & owbs.Count & vbcrlf
End If
End If
End If
output.Show(log)
在数据量很少的时候(比如20行以内),不论怎么执行都不会报错。
所以,问题:
1、这个赋值报错,可能跟数据量大小是有关系的
2、如果把需要赋值的行的ID都显示出来,可以顺利执行。是不是可能有些代码是要延时处理的,否则会有问题?
[此贴子已经被作者于2018/7/6 11:52:01编辑过]