以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教优化打开窗口太耗时  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190261)

--  作者:keli0917
--  发布时间:2024/1/26 20:24:00
--  请教优化打开窗口太耗时
约有十几个TEXT控件的窗口打开,AFTERLOAD事件,加载默认10几个数值,有三个ADDNEW,耗时6秒,怎么优化?


dim dr as row= Tables("表1").AddNew()
    
     
    Dim c1md As New SQL1Command
    
    1cmd1.C  
    1cm1d.CommandText = "Se1lect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'单位\'"
    dr("单位")  = 1cmd.ExecuteScalar()
    ~~~~~~~ 
有十几个1cm1d.CommandText
     
dim dr1 as row= Tables("表2").AddNew()
dim dr2 as row= Tables("表3").AddNew()
   


--  作者:有点蓝
--  发布时间:2024/1/27 8:51:00
--  
请贴出完整代码
--  作者:keli0917
--  发布时间:2024/1/27 10:17:00
--  
能不能设一个函数,加载数据。代码如下:

Dim cmd As new SQLCommand()
cmd.C  \'指定数据源

Dim dr As Row = Args(0) \'
cmd.CommandText = "S1elect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'经营单位\'"
dr("经营单位") = cmd.ExecuteScalar()
cmd.commandtext = "sel1ect 统一社会信用代码 From [JC_公司信息] where 中文全称 = \'" & dr("经营单位") & "\'"

dr("统一社会信用代码")  = cmd.ExecuteScalar()
dr("境内发货人") = cmd.ExecuteScalar()
dr("生产销售单位") =cmd.ExecuteScalar()
cmd.CommandText = "Se1lect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'币种\'"
dr("币种") = cmd.ExecuteScalar() 
cmd.CommandText = "Se1lect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'收汇方式\'"
dr("收汇方式")  = cmd.ExecuteScalar()
cmd.CommandText = "Sel1ect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'唛头\'"
dr("唛头")  = cmd.ExecuteScalar()

cmd.CommandText = "Sel1ect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'包装种类\'"
dr("包装种类")  = cmd.ExecuteScalar()


cmd.CommandText = "Sel1ect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'成交方式\'"
dr("成交方式")  = cmd.ExecuteScalar()
cmd.CommandText = "Sel1ect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'运输方式\'"
dr("运输方式")  = cmd.ExecuteScalar()
cmd.CommandText = "Sel1ect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'监管方式\'"
dr("监管方式")  = cmd.ExecuteScalar()
cmd.CommandText = "Se1lect 单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\' And 方向 = \'征免性质\'"
dr("征免性质")  = cmd.ExecuteScalar()    


然后在窗口的AFTERLOAD事件代码
dim  dr as row = Tables("AAA").AddNew()

Functions.AsyncExecute("加载数据",dr)  \'异步调用



[此贴子已经被作者于2024/1/27 10:17:49编辑过]

--  作者:keli0917
--  发布时间:2024/1/27 10:19:00
--  
测试了一下,这样窗口打开后就卡死了。
--  作者:keli0917
--  发布时间:2024/1/27 10:22:00
--  
无非是打开一个窗口,先新增一行,然后要加载的默认值有点多。可能有几十个。怎么让他慢慢加载进来并赋值给新建行,同时展示在窗口的控件上
[此贴子已经被作者于2024/1/27 10:23:46编辑过]

--  作者:有点蓝
--  发布时间:2024/1/27 10:27:00
--  
[JC_默认值设置]这个表的结构,和存储的数据截图发上来看看
--  作者:keli0917
--  发布时间:2024/1/27 11:24:00
--  
和这个默认值表的结构应该没什么关系吧,就是三列,都是字符型,使用MSSQL数据库
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20240127111839.png
图片点击可在新窗口打开查看

--  作者:keli0917
--  发布时间:2024/1/27 11:52:00
--  
.
[此贴子已经被作者于2024/1/27 12:07:08编辑过]

--  作者:有点蓝
--  发布时间:2024/1/27 14:06:00
--  
这种一个表查一次就行了

Dim cmd As new SQLCommand()
cmd.C  \'指定数据源

Dim dr As Row = Args(0) \'
cmd.CommandText = "S1elect 方向,单据前缀 From [JC_默认值设置] WHERE 名称 = \'默认值\'"
dim dt as datatable = cmd.ExecuteReader()
for each dr1 as datarow in dt.datarows
if dr.Table.Cols.Contains(dr1("方向"))
dr(dr1("方向")) = dr1("单据前缀 ")
end if
next

cmd.commandtext = "sel1ect 统一社会信用代码 From [JC_公司信息] where 中文全称 = \'" & dr("经营单位") & "\'"
dim s as string = cmd.ExecuteScalar()
dr("统一社会信用代码")  = s
dr("境内发货人") = s
dr("生产销售单位") =s