Foxtable(狐表)用户栏目专家坐堂 → 再谈_Identify


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

主题:再谈_Identify

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
怎样用狐表把彩piao30选1的每一组数据排列出来?  发帖心情 Post By:2009/4/30 17:33:00 [只看该作者]

不少没有接触过数据库的用户,包括一些版主,因为不明白“主键”的意思,不懂_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事件中即可:


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


有一个问题需要明确,很多初学的用户将_Identify等同于下图的行号:



此主题相关图片如下:1029.gif
按此在新窗口浏览图片


其实这两者没有任何关系;显然,同一行数据,随着筛选和排序,其行号是不断地变化的,而_Identify列的值是终生不变的。
我们可以这样理解:

1、_Identify表示增加行的顺序,也就是DataRow在DataTable中的顺序,同时也是行的“身份证号码”,终生不变。
2、而上图中的行号,表示Row在Table中的顺序,Row有一个Index属性,返回的就是这个行号,这个行号是动态的,因为同一行数据,在排序和筛选后,其在Table中的位置是会变化的。

[此贴子已经被作者于2009-4-30 17:38:02编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2009/4/30 17:44:00 [只看该作者]

顶,再认真学习!

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


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

沙发,强顶!


晕,沙发没抢到,大过节的还有人蹲守,祝大家节日快乐!

[此贴子已经被作者于2009-4-30 18:05:43编辑过]

 回到顶部
美女呀,离线,留言给我吧!
yangming
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/4/30 17:53:00 [只看该作者]

顶!学习学习再学习!

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/4/30 20:47:00 [只看该作者]

问一句..这个_Identify是有限的吗?它的限制又是多少?按道理无限增加行,这个_Identify总是有限的吧...图片点击可在新窗口打开查看


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


加好友 发短信
等级:超级版主 帖子:312 积分:3190 威望:0 精华:6 注册:2008/8/31 19:42:00
  发帖心情 Post By:2009/5/1 11:33:00 [只看该作者]

以下是引用菜鸟foxtable在2009-4-30 20:47:00的发言:

问一句..这个_Identify是有限的吗?它的限制又是多少?按道理无限增加行,这个_Identify总是有限的吧...图片点击可在新窗口打开查看

呵呵,只听说一个国家人口大多了,粮食不够吃了,养不活了,所以要限制人口,没听说一个国家因为身份证号码有限,搞计划生育的。
另,除了听说宇宙是无限的,数据库的行不可能是无限增加的吧。


 回到顶部