以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 暂停执行事件代码 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=159097) |
-- 作者:狐表(小白) -- 发布时间:2020/12/14 9:38:00 -- 暂停执行事件代码 你好,蓝老师!如果多人操作,在执行以下chick代码对另一个表添加数据时,其他人操作有时会导致其它事件代码出错,比如提示超时或者同窗口其它表新增时自动编号失效出现空白,如何避免多人操作时这种情况出现?或者还要没有其它什么办法可以高速的对另一个表添加数据?如果注释暂停SystemReady代码,添加的速度实在让人无法接受!请指教,谢谢! Dim st As Date = Date.Now SystemReady = False Try \'追加数据代码 With Tables(eForm.Name & "_Table3") If .TopPosition > -1 Then \'如果选定区域包括数据行 Tables(eForm.Name & "_Table3").StopRedraw() Tables(eForm.Name & "_Table4").StopRedraw() Dim r As Row = .rows(.TopPosition) For i As Integer = .BottomPosition To .TopPosition Step -1 Dim dr As Row = .rows(i) Dim r2 As Row = Tables(eForm.Name & "_Table4").AddNew() For Each c As Col In r2.Table.Cols If dr.Table.Cols.contains(c.name) Then r2(c.name)=dr(c.name) r2("差数")=dr("未派数量") r2("派工数量")=dr("未派数量") r2("金额")=dr("金额") r2("单号")=dr("单号") End If Next dr.delete Next Tables(eForm.Name & "_Table3").ResumeRedraw() Tables(eForm.Name & "_Table4").ResumeRedraw() End If End With Catch ex As Exception MessageBox.Show("追加数据失败") End Try SystemReady = True MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") \'计算并显示执行代码所花费的秒数
[此贴子已经被作者于2020/12/14 9:38:35编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/12/14 9:54:00 -- 添加的速度应该是表事件有大量的计算影响的 1、优化一下事件的计算 2、如果不想收表事件影响,可以考虑把窗口表改为sqltable使用。 自动编号也可以放到上面代码里获取 For i As Integer = .BottomPosition To .TopPosition Step -1 Dim dr As Row = .rows(i) Dim r2 As Row = Tables(eForm.Name & "_Table4").AddNew() For Each c As Col In r2.Table.Cols If dr.Table.Cols.contains(c.name) Then r2(c.name)=dr(c.name) End If Next 下面的赋值没有必要放到上面Cols的循环里面 r2("自动编号)=这里使用代码获取新的编号 r2("差数")=dr("未派数量") r2("派工数量")=dr("未派数量") r2("金额")=dr("金额") r2("单号")=dr("单号") dr.delete Next |
-- 作者:狐表(小白) -- 发布时间:2020/12/14 14:18:00 -- 谢谢 |