以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [讨论]动态加载临时列的代码优化 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=40653)
|
-- 作者:kensou11111
-- 发布时间:2013/9/25 21:16:00
-- [讨论]动态加载临时列的代码优化
各位狐友,我设计了一个动态加载临时列的方案,以实现在单据录入的时候能动态加载关联数据,如下图
|
-- 作者:kensou11111
-- 发布时间:2013/9/25 21:23:00
--
接楼上通过代码,在窗口中实现以下效果  此主题相关图片如下:qq截图20130925211332444.png  可以通过在取数函数表中设置字符串,在订单录入窗口中关联显示产品名称、规格等数据,而不必在订单表中增加相应字段。这里感谢狐友有点甜的帮助
但是目前这个方案还有不足之处,由于使用了动态自定义函数,运行速度较慢,不知道有没有优化的方法以提高运行速度?
项目文件如下,为了测试方便,已经改成了内部数据源
|
-- 作者:有点甜
-- 发布时间:2013/9/25 21:23:00
--
需要优化什么?
|
-- 作者:kensou11111
-- 发布时间:2013/9/25 21:27:00
--
当我更改窗口中的产品编号时,虽然其产品名称、规格、颜色等字段能相应变化,但响应速度较慢
|
-- 作者:有点甜
-- 发布时间:2013/9/25 21:30:00
--
如果取数的条件是动态的,就只能是用动态编译的方法。
如果是固定某个规律,而且不再变法的,就可以把代码写死,从而提高效率。
|
-- 作者:有点甜
-- 发布时间:2013/9/25 21:32:00
--
以下是引用kensou11111在2013-9-25 21:27:00的发言:
当我更改窗口中的产品编号时,虽然其产品名称、规格、颜色等字段能相应变化,但响应速度较慢
为什么不直接把取数的条件直接写在代码那里,而不是动态获取值再填入?
[此贴子已经被作者于2013-9-25 21:32:24编辑过]
|
-- 作者:kensou11111
-- 发布时间:2013/9/25 22:59:00
--
因为这样就可以在发布项目之后,不需要更改源代码,直接在取数函数表中设置参数,就可以达到管理动态加载列的效果。
如果直接把取数的条件直接写在代码那里,那如果我以后要在订单录入窗口增加一列 品牌、比重、产品英文名等等的时候,就需要修改源代码
|
-- 作者:逛逛
-- 发布时间:2013/9/26 7:46:00
--
以下是引用kensou11111在2013-9-25 21:16:00的发言:
 此主题相关图片如下:qq截图20130925211240333.png 
你还可以换种思路,
第一种:增加一列函数名,启动相应模块时一次性编译加载,避免每次的重复编译。
第二种:将你的取数表达式列分为三列:条件字段(产品编号)、取数表(窗口1_table1)、取数字段(产品编号)
这样就可以传参调用固定函数。
|
-- 作者:kensou11111
-- 发布时间:2013/9/27 11:28:00
--
以下是引用逛逛在2013-9-26 7:46:00的发言:
你还可以换种思路,
第一种:增加一列函数名,启动相应模块时一次性编译加载,避免每次的重复编译。
第二种:将你的取数表达式列分为三列:条件字段(产品编号)、取数表(窗口1_table1)、取数字段(产品编号)
这样就可以传参调用固定函数。
第一种方式如何实现?
第二种方式,即使将取数表达式列分为3列,在合成COMMANDTEXT时,还是需要使用动态自定义函数,无法回避这个问题啊
|
-- 作者:逛逛
-- 发布时间:2013/9/27 12:21:00
--
此主题相关图片如下:未命名.bmp

第一种,你就增函数名列,在需要的时候用循环,一次性全部生成,后面就按函数名调用,修改的时候重新编译。
第二种方法你增加后面三列,用命令检验以下代码,可行就自行改写成函数调用。
Dim r = Tables("取数函数表").Current Dim ld As String Dim sql As String = "Select " & r("增加列名称") & " From {" & r("表名") & "} " sql += " Where " & r("条件字段") & " =\'" & Tables(r("取数表")).Current(r("取数字段")) & "\'" Dim cmd As New SQLCommand cmd.CommandText = sql ld = cmd.ExecuteScalar() Output.SHOW(LD)
|