Foxtable(狐表)用户栏目专家坐堂 → 实例请教甜大师


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

主题:实例请教甜大师

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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望:0 精华:0 注册:2014/5/15 21:34:00
实例请教甜大师  发帖心情 Post By:2017/9/3 23:53:00 [只看该作者]

大师:见实例,请问如何优化达到目的的代码?实例中4种不同数据量。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.rar


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/4 9:08:00 [只看该作者]

 没看懂你的项目。你要优化哪里的代码?你那些代码都是无法再优化的。

 

 加载的数据量越大,越慢。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/4 9:13:00 [只看该作者]

 如果要加快加载数据速度,那就用外部数据源,然后设置索引。

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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2017/9/4 12:01:00 [只看该作者]

方法或思路优化也行呀,只要达到目的就行。
这样测试:
(1)最小数据测试
第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb1,第二个选择2014,第三个选择01。
第二部:点击加载表
第三部:点击生成明细账(我就要生成这样的目标样式查询表)
(2)小数据测试
第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb889,第二个选择2013,第三个选择01。
第二部:点击加载表
第三部:点击生成明细账
(3)中等数据测试
第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb900,第二个选择2013,第三个选择01。
第二部:点击加载表
第三部:点击生成明细账,(2000多行数据,这一步要运行10多秒)
(4)大数据数据测试
第一步:首先打开并列窗口,在第一个选项框选择dtpzzbwb888,第二个选择2013,第三个选择01。
第二部:点击加载表
第三部:点击生成明细账,(40000多行数据,要运行何年马月?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/4 12:41:00 [只看该作者]

 直接说明你生成表的逻辑是什么?没看懂你sql语句的意思。

 

 尽量不要用子查询,多个表的情况,请尽量用 inner join 连接 。

 

 再有就是,改成外部数据源,数据库那里加上索引。


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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2017/9/4 12:56:00 [只看该作者]

逻辑很简单!
比如:
我要查询同一张表的a列=“好”,对应的b列的值的其他列的分组统计结果,同时增加一c列,在c列中的每一行填写“好”。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/4 21:45:00 [只看该作者]

参考代码,不到万不得已,不要用子查询。

 

'''


Dim st As Date = Date.Now

Dim com2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim com3 As WinForm.ComboBox = e.Form.Controls("ComboBox3")


Dim zgsztnd As String = com2.Value

Dim zgsztyf As String = com3.Value

Dim com As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim zfc As String

zfc = "select 纵向科目, c.pzzb5,c.pzzb6,c.pzzb7, sum(d.pzzb8) as pzzb8,sum(d.pzzb9) as pzzb9,c.pzzb12,c.pzzb44,c.pzzb45,'' as 横向科目 ,1*0 as 金额  from (Select distinct a.pzzb12 As 纵向科目, a.pzzb5,b.pzzb6,a.pzzb7,b.pzzb12 as pzzb12,a.pzzb44,a.pzzb45 from (select pzzb5,pzzb6,pzzb7,pzzb12,pzzb44,pzzb45 from {dtpzzbwb} where  pzzb2 = '" & zgsztnd & "' and pzzb3 <= '" & zgsztyf & "' and pzzb12 in ('股本', '固定资产','现金', '银行存款') group by pzzb12,pzzb5,pzzb6,pzzb7,pzzb44,pzzb45) as a left join {dtpzzbwb} as b on a.pzzb5=b.pzzb5) as c inner join {dtpzzbwb} as d on c.pzzb5=d.pzzb5 and c.pzzb12=d.pzzb12 and iif(c.pzzb6 is null, true, c.pzzb6=d.pzzb6) group by 纵向科目, c.pzzb5,c.pzzb6,c.pzzb7,c.pzzb12,c.pzzb44,c.pzzb45"
zfc = zfc.Replace("dtpzzbwb",com.Value)

output.show(zfc)

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

'MessageBox.Show(zfc)

Dim cmd As New SQLCommand
Dim kmmxz As DataTable
cmd.CommandText = zfc
kmmxz = cmd.ExecuteReader()

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

 

Dim tb As WinForm.Table = e.Form.Controls("Table1")
tb.Table.DataSource = kmmxz
tb.Table.Cols("横向科目").Width = 200
tb.Table.Cols("pzzb7").Width = 200
tb.Table.Cols("纵向科目").Width = 120
tb.Table.Cols("pzzb12").Width = 150
tb.Table.AllowEdit = True


 回到顶部