以文本方式查看主题

-  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=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\')")