以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  表中增加了多行后保存时获取编号的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=80591)

--  作者:happyft
--  发布时间:2016/1/26 22:30:00
--  表中增加了多行后保存时获取编号的问题
在表的beforesavedatarow中用了如下的代码,在表中增加了前辍相同的多行后按项目默认的那个保存按钮保存时,SQL数据库会提示违反唯一约束或索引的错误提示,主要原因就是保存第一行时查询到后台原来的最大值是21,保存后生成新的最大编码22,应该执行到保存第二行时查询到的最大值应该是22,此时第二行再保存就会再生成新的最大值23,如此类推一次保存新增的多行应该不会出错。难道ft的保存机制时新增多行时是一次同时保存的吗?我这种情况同时增加多行时每行保存时都能续用上一行产生的最大编码+1要怎么办?
谢谢!

\'直接从产品编码中查找最大号生成编号
dr = e.DataRow
pf = dr("序号") & "-" & dr("唛头") & "-"  \'获得编号的前缀
cmd.ConnectionName = Mydata \'设置数据源名称
cmd.commandText = "Se lect Max(产品编码) From {产品编码} Where 产品编码 Like \'" & pf & "%\'"
Dim idx As Integer
If cmd.ExecuteScalar > "" Then \'如果存在最大编号
    Dim cd As String = cmd.ExecuteScalar
    Dim sx As Integer = cd.LastIndexOf("-")  \'取得最后一个分隔符的位置.
    idx = Cint(cd.SubString(sx+1))  \'将编号中的顺序号转换为整数
    idx = idx + 1 \'获得最大编号的后三位顺序号,并加1
Else
    idx = 1 \'否则顺序号等于1
End If
msgbox(idx)
e.DataRow("产品编码") = pf & Format(idx,"00000")

--  作者:HappyFt
--  发布时间:2016/1/26 22:36:00
--  
如果每次增加1行就保存一下就不会出错,但先复制新增加几行后再一次保存就会出错
--  作者:HappyFt
--  发布时间:2016/1/26 22:58:00
--  
老师帮忙看下
--  作者:大红袍
--  发布时间:2016/1/27 0:13:00
--  
不要重复发帖。