Foxtable(狐表)用户栏目专家坐堂 → 网络环境下的复杂编号的问题


  共有4966人关注过本帖树形打印复制链接

主题:网络环境下的复杂编号的问题

帅哥哟,离线,有人找我吗?
lihe60
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6835 积分:43243 威望:0 精华:0 注册:2009/3/2 14:07:00
网络环境下的复杂编号的问题  发帖心情 Post By:2013/5/5 9:22:00 [只看该作者]

帮助中网络环境下的复杂编号

 

使用自动增量主键,例如_Identify列,能够有效解决编号的问题,即使是多人同时向一个表中增加行,也不会出现重复的编号。

现在有个问题:第一次打开软件时,e.datarow("_identify")=0,而不是最大的主键编号。


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/5/5 9:26:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=26913&replyID=&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/5 10:42:00 [只看该作者]

一定要建立编号表的,否则你这样弄编号肯定会重复。
你这种方法我以前也用过,存在跟你一样的问题,无法获得最大identify,但是可以要先获取最大值。但是当多人使用的时候,编号也会重复。
使用identify来关联编号是非常不靠谱的,以后迁移,拆分表的时候,就痛苦死你了
所以你还是不要想其他方法了,按照教程的修改下吧。


 回到顶部
帅哥哟,离线,有人找我吗?
everybody
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2252 威望:0 精华:0 注册:2013/2/28 9:05:00
  发帖心情 Post By:2013/5/5 10:49:00 [只看该作者]

以下是引用jspta在2013-5-5 10:42:00的发言:
一定要建立编号表的,否则你这样弄编号肯定会重复。
你这种方法我以前也用过,存在跟你一样的问题,无法获得最大identify,但是可以要先获取最大值。但是当多人使用的时候,编号也会重复。
使用identify来关联编号是非常不靠谱的,以后迁移,拆分表的时候,就痛苦死你了
所以你还是不要想其他方法了,按照教程的修改下吧。

你说的这个 按照教程修改下吧,是指那个教程?

 

 

不是这个么?

 

 

再谈_Identify

我们知道内部表有一个_Identify,这是一个整数型列,每增加一行,该列的值就会自动加1。
该列的值是只读的,我们没有办法使用常规的代码去修改_Identify值。

可以将_Identify值看作是行的身份证号码,因为新增行一旦保存,其_Identify值将终生不变。
这个“身份证号码”就是主键,系统就是根据这个值来识别不同的行的。

实际使用的时候,我们是看不到_Identify列的,但是可以在代码中使用该列,例如:

Dim id1 As Integer = Tables("订单").Current("_Identify")
Dim
id2 As Integer = Tables("订单").Rows(0)("_Identify")
Dim
id3 As Integer = DataTables("订单").DataRows(1)("_Identify")

也可以在表达式中使用该列,例如可以增加一个表达式列,将其表达式设为:

[_Identify]

这样即可通过此列查看_Identify的值。
可以看出_Identify列除了不可见,使用起来和普通的列并无差别。

_Identify值类似行的编号,这个编号表示数据录入的顺序,也就是某个DataRow在DataTable中的顺序。
下面是一个根据输入顺序进行流水账计算的例子,设置在DataColChanged事件中即可:

Dim Val1 As Double
Dim Val2
As Double
Select
Case e.DataCol.Name
Case "收入","支出"
   
For Each dr As DataRow In e.DataTable.Select("[_Identify] >= " & e.DataRow("_Identify") )
        Val1 = e.
DataTable.compute("Sum(收入)","[_Identify] <= " & dr("_Identify"))
        Val2 = e.
DataTable.compute("Sum(支出)","[_Identify] <= " & dr("_Identify"))
        dr(
"余额") = Val1 - Val2
   
Next
End
Select


 回到顶部