以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128119) |
-- 作者:xybcxh -- 发布时间:2018/11/29 11:22:00 -- [求助] 老师,今天碰到一个问题,应该怎么改: .NET Framework 版本:2.0.50727.5420 Foxtable 版本:2018.10.9.1 错误所在事件:窗口,设备新增,AfterLoad 详细错误信息: 索引和长度必须引用该字符串内的位置。 参数名: length 窗口,设备新增,AfterLoad: Tables("杭康设备总表").allowedit = True Tables("杭康设备总表").AddNew \'---------以下是自动生成公司编号-------------------------- Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)") Dim idx As Integer If i > " " Then idx = cint(i.SubString(8,5)) +1 Else idx = 1 End If Tables("杭康设备总表").Current("公司编号") = "ZJHK/ZY-" & ForMAT(idx,"00000") Tables("杭康设备总表").Current("序号") = DataTables("杭康设备总表").Compute("max(序号)")+1 \'---------以上是自动生成公司编号----------------------------- Dim gsbh As WinForm.TextBox = e.Form.Controls("公司编号") Dim ybh As WinForm.TextBox = e.Form.Controls("原编号") ybh.Value = gsbh.Value Dim r As Row = Tables("杭康设备总表").Current r("原编号") = ybh.Value ----------------- 公司编号列有如下各种内容: ZJHK/ZY-768 ZJHK/ZY-17-01 ZJHK/ZY-Y01 ZJHK/ZY-CZ01 ZJHK/ZY-AQM01 ZJHK/ZY-17135-3 ZJHK/ZY-18108 以前一直能用,不报错,这几天增加了一列(表结构改动了),新增就报错了,编号不能自动生成。请老师帮助。谢谢。 只要求生成的编号试样:ZJHK/ZY-18108 就成。其他的排除。
[此贴子已经被作者于2018/11/29 11:34:36编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/11/29 11:32:00 -- 1、不同类型的编号,编写的代码不能一样的。
2、你写的这个代码,意识是前8位是前缀,后面5位是编号,但对于【ZJHK/ZY-768】或 【ZJHK/ZY-CZ01】就不适用了
idx = cint(i.SubString(8,5)) +1
你可以尝试改成比如
idx = val(i.SubString(8)) +1
但这样,也不能匹配你所有的编号的,必须有相同的规律才行。
3、具体实例发上来测试,说明你要做到什么效果。 |
-- 作者:xybcxh -- 发布时间:2018/11/29 11:36:00 -- 只要求生成的编号试样:ZJHK/ZY-18108 就成。其他的排除。 |
-- 作者:有点甜 -- 发布时间:2018/11/29 11:38:00 -- 代码改成这样试试,看弹出什么
Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)")
msgbox(i)
Dim idx As Integer
msgbox(i.length)
If i > "" Then
idx = val(i.SubString(8)) +1
Else
idx = 1
End If
msgbox(idx)
|
-- 作者:xybcxh -- 发布时间:2018/11/29 11:46:00 -- ZJHK/ZY-Y10 11 1 |
-- 作者:有点甜 -- 发布时间:2018/11/29 11:50:00 -- 1、你数据里面,为什么有这样的数据?【ZJHK/ZY-Y10】?
2、或者,你可以把
Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)")
改成
Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)", "len(公司编号)=13") |
-- 作者:xybcxh -- 发布时间:2018/11/29 11:55:00 -- 有的。我现在要生成8+5的编号,然后比原编号+1就成 ZJHK/ZY-00000
|
-- 作者:有点甜 -- 发布时间:2018/11/29 11:55:00 -- 改成
Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)", "len(公司编号)=13")
|
-- 作者:xybcxh -- 发布时间:2018/11/29 12:00:00 -- .NET Framework 版本:2.0.50727.5420 Foxtable 版本:2018.10.9.1 错误所在事件:窗口,设备新增,AfterLoad 详细错误信息: 从字符串“AQM30”到类型“Integer”的转换无效。 输入字符串的格式不正确。 老师,把这有字符串的排除就可以了。
|
-- 作者:有点甜 -- 发布时间:2018/11/29 12:08:00 -- 改成
Dim i As String = DataTables("杭康设备总表").Compute("max(公司编号)", "len(公司编号)=13 and substring(公司编号, 9, 1) in (\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\')") |