以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 新增多行后保存时获取最大编号的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80592) |
-- 作者:happyft -- 发布时间: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")
|
-- 作者:大红袍 -- 发布时间:2016/1/27 0:11:00 -- 多行一起保存的时候,是一起保存的,不会一个接一个帮你保存。 |
-- 作者:大红袍 -- 发布时间:2016/1/27 0:13:00 -- 要做,你就在beforeSaveDataRow事件写sql代码自己保存,然后加上 e.Cancel = true
否则,你就要循环每一行保存,而不是直接 datatables().Save |