以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]不加载原始数据的情况下,如何使用表达式列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132952)

--  作者:chnfo
--  发布时间:2019/4/2 21:44:00
--  [求助]不加载原始数据的情况下,如何使用表达式列
使用外部数据源。
表A和表B设置关联,表B作为表A的子表。
表A中有编号、名称、规格型号、单位这4列。
表B中有AID是数据列,然后有编号、名称、规格型号、单位这四列都是表达式列。

如果不加载表A的数据,如何在表中展示选定的AID对应的编号、名称、规格型号、单位这四列的信息呢?

主要是不想在表B中冗余过多的列,一是数据量大的时候保存耗时长,二是无谓导致数据库大很多
[此贴子已经被作者于2019/4/2 21:50:05编辑过]

--  作者:有点蓝
--  发布时间:2019/4/2 21:56:00
--  
要么加载表A的数据,要么使用数据列。

或者改为临时列,然后在datacolchanged中从后台数据库查询数据赋值,不过这样效率也不高。

个人认为
1、关联的数据一般都加载
2、适当的冗余是可以的

--  作者:chnfo
--  发布时间:2019/4/2 22:07:00
--  
不同的项目,有不同的采购清单。

但公司在审核多个项目的采购计划的时候,总不能审A项目的采购计划之前,还把A项目的采购清单加载进来;再审B项目的,又把B项目的采购清单加进来啊

--  作者:有点蓝
--  发布时间:2019/4/2 22:23:00
--  
很正常啊。不都是这样做的吗。动态加载,按需加载嘛
--  作者:chnfo
--  发布时间:2019/4/2 22:25:00
--  
图片点击可在新窗口打开查看为了审10行物资的采购计划,还要把采购清单的几千上万行先加载进来,这个……

当然,也不排除一次审的采购计划会有几千行的情况

[此贴子已经被作者于2019/4/2 22:25:19编辑过]

--  作者:有点蓝
--  发布时间:2019/4/2 22:57:00
--  
假设1楼所说的表B就是物资的采购计划,只有10行。那么这10行的对应的编号、名称、规格型号、单位这四列的信息需要从其它表的几千行才能获取吗?!就算是需要从其它表的几千行中取得这些数据,那也可以做个查询表,或者统计表,只返回这10行需要的数据不就行了。

具体情况具体分析,不如做个实例看看
[此贴子已经被作者于2019/4/2 22:59:38编辑过]

--  作者:chnfo
--  发布时间:2019/4/3 10:55:00
--  
不是这个意思。

每个项目有一个物资采购目录A(它的明细行数很多,非常多),即:项目名称、物资编号、名称、规格、单位
采购计划是一个主子表结构。
主表X是项目名称、计划编号、编制日期
子表Y是XID、物资ID、采购数量、单价、金额。

这里物资ID就是从A中取的。
每次的计划明细都要从A中选择过来,然后填写数量、单价等信息。

公司可能一天要审多个项目的采购计划。
要么是审A项目的时候,把A项目的物资目录A加载进来,然后计划明细中的物资ID对应的编号、名称、规格、单位都用表达式列(因为采购目录行数多,加载耗时),而且公司不仅要审多个项目的,在不同项目间切换时,就要不断加载不同项目的采购目录,比较耗时
要么是审A项目的时候,子表Y用临时列,查找相应的物资ID,给编号、名称、规格、单位列赋值(如果有的计划明细项很多,多列赋值效率就比较低)


或者在加载物资目录的时候,增加一个条件,只加载某一个计划明细所包含的物资目录,这样行数会少很多。
[此贴子已经被作者于2019/4/3 11:02:19编辑过]

--  作者:有点甜
--  发布时间:2019/4/3 11:27:00
--  

 

根据你的物资id,合成加载条件,把你A中的数据加载出来即可。

 


--  作者:chnfo
--  发布时间:2019/4/3 11:41:00
--  
Dim x As String = DataTables("采购明细").SQLGetComboListString("ID","项目 = \'A项目\' and 采购单号 = \'CG001\'")
Dim y As String = "\'" & x.Replace("|","\',\'") & "\'"

DataTables("采购目录").LoadFilter = "项目 = \'A项目\' and 物资ID in (" & y & ")"
DataTables("采购目录").Load

当y过长的时候,运行时报错:
加载[采购目录]失败!
详细错误信息:
查询过于复杂。


如何正确使用加载条件呢?

--  作者:有点甜
--  发布时间:2019/4/3 11:47:00
--  

用这种方法,如

 

DataTables("采购目录").LoadFilter = "项目 = \'A项目\' and 物资ID in (select id from 采购明细 where 项目 = \'A项目\' and 采购单号 = \'CG001\')"