以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何引用基础表产品编码中的相关信息  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=95126)

--  作者:happyft
--  发布时间:2017/1/10 19:08:00
--  如何引用基础表产品编码中的相关信息
产品编码表中有产品编码,品名,规格,颜色等字段,项目中大多数表都会用到产品编码字段,其他品名,规格则是根据产品编码来提取显示,为了不重复要如何调用这些数据呢?
1、在每个表中都增加品名,规格,颜色等数据列,当录入数据时写代码根据产品编码来自动填充,
这种方法的不好是增加字段列及容量,如果产品编码表中相关的品名变更了必须要写代码来更新所有表中对应值;

2、最想要的方式就是各数据表中仅设置产品编码一个字段,当在打开各个窗口时直接从本表及产品编码联合起来调用。但问题是不知道两个表以上的窗口sqltable如何加载表结构及数据?
我的项目全部是用窗口SQLTABLE的方式fill表结构然后用sqlload加载数据的,比如加载订单表及产品编码表中的品名,规格等想如下:
加载表结构:Tables("订单_主表").Fill("s elect *,品名,规格 as RowNum from  订单 a innere join 产品编码 z on a.产品编码 = z.产品编码 where a.[_Identify] = 0",Mydata,False)
加载数据也类似,用sql语句及RowNum分页 ,最后类似 DataTables("订单_主表").SQLLoad(sql)这样来加载数据。
这种方式可行吗?如果可行窗口表保存时修改的字段会自动保存到对应的数据表中吗?因为有订单表及产品编码两个表不出错吧?

如果上面方式不行,是否在sql数据库的先用视图将订单表及产品编码做个查询,然后再用类似

Tables("订单_主表").Fill("S elect * From {查询表} Where 产品名称 = \'AAA\'","nwnd",false)  

同样的问题窗口表保存时会正确保存数据吗?


还是说有其他更好的办法?

谢谢!




--  作者:有点蓝
--  发布时间:2017/1/10 20:27:00
--  

多表只能使用sqlquery,不能使用sqltable,没有办法保存。

查询表也不能保存。

1、使用表达式列或临时列
2、使用副表的模式显示产品信息
3、显示和录入分开

--  作者:HappyFt
--  发布时间:2017/1/10 21:32:00
--  
谢谢!
1、作用表达式列每个窗口的sqltable都要通过代码去增表达式列也很繁琐
2、sqltable如何设置事表?
3、显示和录入分开在两个表中显示,这样打印时调用也很繁琐

有没有简单的办法呢

--  作者:有点蓝
--  发布时间:2017/1/10 21:42:00
--  
sqltable事件到窗口设计器设置事件,如果是fill的,可能要到全局事件设置



--  作者:HappyFt
--  发布时间:2017/3/1 11:20:00
--  
现在想通过设置关联列的方式来用表达式列来引用产品编码表中的列,fill的sqltable因为没有加载表结构,要如何设置关联

Relations.Add("关联1",DataTables("产品").DataCols("产品编号"),DataTables("订单").DataCols("产品编号"))

这种只能用于表已经加载的情况。


--  作者:有点色
--  发布时间:2017/3/1 12:29:00
--  

sqlTable用子查询应该是可以的。但只能保存表A的数据

 

Select *, (select top 1 第二列 from {表B} as b where a.第一列 = b.第一列) as 第十一列 from {表A} As a


--  作者:HappyFt
--  发布时间:2017/3/3 11:45:00
--  
这种方式可以实现。但还有一个问题,现在所有相关表单都通过产品编码与产品编码表中的产品编码对应了,
如果产品编码表中的产品编码更改,势必要同步所有表中的产品编码,我知道的可以在数据库中通过关系图设定他们之间的一对多关系,修改删除都可以同步控制,如果不用关系图还有什么办法,但如果表中有引用的产品编码禁止删除又要怎么办?是用触发器来遍历更改吗?
谢谢!

--  作者:有点色
--  发布时间:2017/3/3 12:22:00
--  

逻辑,可以在foxtable用代码控制。

 

如果是数据库层面,必须用触发器了。