Foxtable(狐表)用户栏目专家坐堂 → 新增多行后保存时获取最大编号的问题


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

主题:新增多行后保存时获取最大编号的问题

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
新增多行后保存时获取最大编号的问题  发帖心情 Post By:2016/1/26 23:29:00 [只看该作者]

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

'直接从产品编码中查找最大号生成编号
dr = e.DataRow
pf = dr("序号") & "-" & dr("唛头") & "-"  '获得编号的前缀
cmd.ConnectionName = Mydata '设置数据源名称
cmd.commandText = "S elect 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")

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 0:11:00 [只看该作者]

多行一起保存的时候,是一起保存的,不会一个接一个帮你保存。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 0:13:00 [只看该作者]

要做,你就在beforeSaveDataRow事件写sql代码自己保存,然后加上 e.Cancel = true

 

否则,你就要循环每一行保存,而不是直接 datatables().Save


 回到顶部