Foxtable(狐表)用户栏目专家坐堂 → 暂停执行事件代码


  共有1948人关注过本帖树形打印复制链接

主题:暂停执行事件代码

帅哥哟,离线,有人找我吗?
狐表(小白)
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
暂停执行事件代码  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
狐表(小白)
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
  发帖心情 Post By:2020/12/14 14:18:00 [只看该作者]

谢谢

 回到顶部