以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 不懂就问:表达式列不能作关联列?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85)

--  作者:xipies
--  发布时间:2008/9/1 17:43:00
--  [求助] 不懂就问:表达式列不能作关联列?
我的业务系统里的业务编号是需要自动累加生成的,如00001,00002等,必须用到表达式列,但表达式列又不能作为关联列和其他表相关联,(例如和业务明细表的业务编号列关联),怎样解决?
--  作者:nidecan
--  发布时间:2008/9/1 17:45:00
--  
我也遇到类似问题
--  作者:狐狸爸爸
--  发布时间:2008/9/1 17:47:00
--  

自动编号与关联

前面已经提到,由于自动编号列_Identify的存在,我们可以删除原来的产品编号、客户编号、订单编号等列,新增一个同名的表达式列,表达式设为:

[_Identify]

现在有一个问题,在我们的示例文件中,产品表通过产品编号和订单表建立关联、客户表通过客户编号列和订单表建立关联,但是现在的产品编号、客户编号是表达式列,而表达式列是不能作为关联列使用的,那怎么办呢?

很简单,直接用_Identify列代替产品编号、客户编号列,作为产品表和客户表的关联列使用。


--  作者:狐狸爸爸
--  发布时间:2008/9/1 17:49:00
--  

不重复编号的生成

也许你已经留意到,在表达式生成器中,有一个在表中并未出现的列名:_Identify

_Identify是实实在在存在的列,只是你看不到而已;新增记录的时候,该列的值会自动增量,步长为1,但是该值是临时的,保存的时候,才会生成真正的值。

即使多人同时增加和保存数据的时候,该列的值也是不重复的,这个列类似于Access/Sql Server的自动增量主键,不同的是,多人同时保存的时候,在FoxTable中,每个人的得到的编号是连续的,而Access/Sql Server是分散的。

有了_Identify,你可以删除原来的产品编号、客户编号、订单编号等列,新增一个同名的表达式列,表达式设为:

[_Identify]

这样不仅编号可以生成,而且不管有多少人同时向表中增加行,生成的编号都是连续的,而且是不重复的。

副作用是,你永远无法修改编号列的内容,不过从数据安全角度来看,也许这样更好!

提示:只有内部数据表才有_Identify列。


--  作者:xipies
--  发布时间:2008/9/1 17:49:00
--  
呵呵,这个没有仔细看,但是感觉要花点时间琢磨琢磨才行,谢谢
--  作者:狐狸爸爸
--  发布时间:2008/9/1 17:50:00
--  
自动编号不再是难题,系统已经自动处理了。
--  作者:狐狸爸爸
--  发布时间:2008/9/1 17:51:00
--  
建议循序渐进看帮助,不要跳着来。
--  作者:xipies
--  发布时间:2008/9/1 18:00:00
--  
以下是引用狐狸爸爸在2008-9-1 17:51:00的发言:
建议循序渐进看帮助,不要跳着来。


谢谢谢谢,主要是有点激动有点急,想马上把自己需要的各种功能过一遍


--  作者:xipies
--  发布时间:2008/9/1 18:44:00
--  
这个还是有点问题,用[_Identify]列作为业务编号来关联,他只能生成1,2,3等格式的序列数,但我一般常用的业务编号格式为两种,第一种:10位数的顺序序列,如0000000001,0000000002,0000000893等,第二种是以日期为单位每日从1开始递增,如2008年8月30日有3笔业务,则编号为20080830-0001,20080830-0002,20080830-0003,而到31号时又从1开始,如20080831-0001,20080831-0002等,这样又如何实现?
--  作者:狐狸爸爸
--  发布时间:2008/9/1 19:03:00
--  
这个你要继续看帮助,用计算代码。