以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  在多用户环境下实现不重复编号  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2302)

--  作者:baoxyang
--  发布时间:2009/4/5 16:46:00
--  在多用户环境下实现不重复编号
使用外部数据表新增一行时,如何在多用户环境下实现不重复编号?如何设置及代码?
--  作者:czy
--  发布时间:2009/4/5 16:48:00
--  

在多用户环境下实现不重复编号

普通用户可以忽略本节内容.

我们已经知道,内部表利用_Identify,外部表利用自动增量主键,可以实现不重复的编号,即使在网络环境下多人同时输入数据,编号也不会重复.但是这种自动编号只能是一个数字,无法实现复杂的含特殊信息的编号要求.如果自己编码来实现自动编号,在多人同时输入数据的时候,将会出现重复编号,很多专业程序员对此也常常感到束手无策.

 

示例一

要求编号的前两位表示年,接着两位表示月,随后是四位数字的顺序号.
例如:09120008,表示09年12月的第8条记录.
在多人同时输入数据的时候,相互并不知道其他人是否正在输入数据,已经输入了多少数据,那么如何各自获得不重复的正确编号呢.

我们可以在数据源中增加一个表,


--  作者:baoxyang
--  发布时间:2009/4/5 16:57:00
--  

我是初学者,这些我都看过,但没有实例,实际不会应用呀。我用的是外部表。请赐教如何编码或设置


--  作者:baoxyang
--  发布时间:2009/4/5 16:58:00
--  
具体点?
--  作者:baoxyang
--  发布时间:2009/4/5 16:59:00
--  

例如,我想实现PT+日期+流水号(4)?


--  作者:hty4000
--  发布时间:2009/9/1 22:51:00
--  
我也想知道
--  作者:blackzhu
--  发布时间:2009/9/2 14:05:00
--  
以下是引用baoxyang在2009-4-5 16:59:00的发言:

例如,我想实现PT+日期+流水号(4)?

If e.DataCol.Name = "列名" Then  \'要变化的列
    If e.Datarow.IsNull("列名")   Then \'如果这个列是空值
        e.Datarow("编号列") = DBNull.Value  \'编号列为空
    Else
              e.DataRow("编号列")  = "PT" & Format(e.DataRow("日期"),"yyMMdd")  & Format(e.DataTable.Compute("Count(日期)", "[日期] = #" & e.DataRow("日期")  & "# And [_identify] < 100" & e.DataRow("_Identify"))+1,"00")

       
       
    End if
End If

放在表事件datacolchanged中.