以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 自动编号重复,老师看看怎么回事吧 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=119412) |
-- 作者:guosheng -- 发布时间:2018/5/24 14:35:00 -- 自动编号重复,老师看看怎么回事吧 SQLserver数据源。 即使是一个人录入:偶尔也会出现,自动生成的编号有重复的现象。 Dim cr As Row = Tables("发文登记表").Current Dim y As Integer = rq.Year Dim m As Integer = rq.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = Format(rq,"yyyyMM") \'生成编号的前6位,4位年,2位月. Dim max As String Dim idx As Integer max = DataTables("发文登记表").sqlCompute("Max(文件编号)","发文部门=\'"& user.group &"\' and 发文登记日期>= \'" & fd & "\' And 发文登记日期<= \'" & ld & "\' And [_Identify] <> " & cr("_Identify")) \'取得该月的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If cr("文件编号") =dr("部门缩写") & "-FW-" & bh & "-" & Format(idx,"000") Tables("发文登记表").save
|
-- 作者:有点甜 -- 发布时间:2018/5/24 15:13:00 -- 你部门缩写都是相同数量的字符的吗?如果不是
idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1
请改成
idx = CInt(max.Substring((dr("部门缩写") & "-FW-" & bh & "-").length,3)) + 1 \'获得最大编号的后三位顺序号,并加1
多人同时录入的时候,有可能重复;但一个人录入的时候如果重复,那不可能。
你在保存之前beforeSaveDataRow、DataColChanging事件试试判断重复
http://www.foxtable.com/webhelp/scr/2481.htm
|
-- 作者:guosheng -- 发布时间:2018/5/24 15:32:00 -- 如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空? 手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧? 有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢
[此贴子已经被作者于2018/5/24 15:34:13编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/24 16:24:00 -- 以下是引用guosheng在2018/5/24 15:32:00的发言:
如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空?
手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧?
有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢
[此贴子已经被作者于2018/5/24 15:34:13编辑过]
【如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空?】
不可以;不会。
【手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧?】
一样的处理一样的代码而已。
【有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢】
多人同时操作的时候,会有小概率出现重复,如:同一时间有三个sqlcompute查找最大值,得到都是99,然后99+1存放为100,那么就有3个重复值。 |
-- 作者:guosheng -- 发布时间:2018/5/24 18:24:00 -- 如果在保存表时,多执行几遍,sqlcompute和表保存,统计等于生成的编号。如果统计数据>1,则重新编号。 是否会一定程度上解决多人同时操作时编号重复? 老师推荐这个防止重复的链接,应该只能解决 一个人录入的重复,而无法解决多人同时录入重复吧?http://www.foxtable.com/webhelp/scr/2481.htm [此贴子已经被作者于2018/5/24 20:12:15编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/24 20:59:00 -- 如果要彻底解决编号是否重复,请加上 _Identify 列的值到你的编号去。此列的值肯定是不重复的。
或者是使用openQQ编号 http://www.foxtable.com/webhelp/scr/3008.htm
或者 http://www.foxtable.com/webhelp/scr/1994.htm
|
-- 作者:guosheng -- 发布时间:2018/5/25 11:35:00 -- 已经将52177和25000/30000的入站规则和安全组加入。 根据老师的说法测试openqq功能,增加行后录入信息,“提示clientqq未启动,无法自动编号”。可能是什么原因啊? 1、已单独建立client的客户端项目,并发布后在服务器上运行。 2、除了以下代码,无其他代码 了。 3、在client项目的afteropenproject事件加入: QQServer.ServerIp = "0.0.0.0" \'指定IP地址 QQServer.ServerPort = 52177 \'指定登录端口 QQServer.HeartbeatInterval = 30 \'指定心跳时间 QQServer.HeartbeatTimeout = 100 \'指定心跳超时时间 QQServer.PortRange = "25000/30000" \'指定随机端口范围 QQServer.Start() \'启动QQServer 4、其余都是粘贴帮助用OpenQQ实现网络环境下的编号第一例子的代码。 [此贴子已经被作者于2018/5/25 11:36:45编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/25 11:39:00 -- 先去看看qqserver.foxdb、qqclient.foxdb,把例子弄明白了,再做编号
http://www.foxtable.com/webhelp/scr/2968.htm
http://www.foxtable.com/webhelp/scr/2972.htm
|
-- 作者:guosheng -- 发布时间:2018/5/25 14:21:00 -- 设置完客户端和服务器openqq的代码后,客户端登录时出现:已添加了具有相同键的项。是什么原因啊? .NET Framework 版本:2.0.50727.8762 Foxtable 版本:2018.3.3.1 错误所在事件:启动IMClient 详细错误信息: 已添加了具有相同键的项。
|
-- 作者:有点甜 -- 发布时间:2018/5/25 14:26:00 -- UserLogging事件,改代码
For Each dr2 As DataRow In DataTables("user").select("") |