Foxtable(狐表)用户栏目专家坐堂 → 请问为何插入1000行需要20秒,如何提高效率?


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

主题:请问为何插入1000行需要20秒,如何提高效率?

帅哥哟,离线,有人找我吗?
hbhb
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5055 积分:13047 威望:0 精华:0 注册:2014/5/15 21:34:00
请问为何插入1000行需要20秒,如何提高效率?  发帖心情 Post By:2023/8/21 16:41:00 [只看该作者]

大师:窗口中的表
请问为何插入1000行需要20秒,如何提高效率?

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


加好友 发短信
等级:超级版主 帖子:107604 积分:547323 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/21 16:43:00 [只看该作者]

屏蔽表事件,表达式列计算

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


加好友 发短信
等级:狐神 帖子:5055 积分:13047 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2023/8/21 16:53:00 [只看该作者]

已经用了下面的代码后还要20秒,否则更长。

SystemReady = False
'追加数据代码

SystemReady =
True


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


加好友 发短信
等级:超级版主 帖子:107604 积分:547323 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/21 16:56:00 [只看该作者]

什么数据库?贴出完整代码看看

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


加好友 发短信
等级:狐神 帖子:5055 积分:13047 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2023/8/21 17:07:00 [只看该作者]

Dim st As Date = Date.Now

Dim tb29 As WinForm.Table = Forms("窗口1").Controls("Table1")
Dim tb As Table = tb29.Table
tb.Position = 5


窗口中的10列表

SystemReady = False
Try
    For n As Integer = 1 To 1000
        tb.InsertNew
    Next
Catch ex As Exception
    MessageBox.Show("追加数据失败") 
End Try
SystemReady = True


MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


加好友 发短信
等级:超级版主 帖子:107604 积分:547323 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/21 17:25:00 [只看该作者]

每插入1行要计算sortkey的值,当然慢了

换种方法,先添加1000行,再更改sorkey值

Dim st As Date = Date.Now

Dim tb29 As WinForm.Table = Forms("窗口1").Controls("Table1")
Dim tb As Table = tb29.Table
tb.Position = 5
Dim a As Decimal = tb.rows(4)("_sortkey")
Dim b As Decimal = tb.rows(5)("_sortkey")

Dim c As Decimal = (b - a) / 1010

Dim max As Integer = tb.rows.Count - 1
tb.StopRedraw
SystemReady = False
tb.AddNew(1000)

'窗口中的10列表

Try
    For n As Decimal = 1 To 1000
        a = a + c
        tb.rows(max + n)("_sortkey") = a
    Next
Catch ex As Exception
    MessageBox.Show("追加数据失败") 
End Try
SystemReady = True
tb.ResumeRedraw

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

 回到顶部