以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]自动编号出错,哪儿有问题啊?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=85991)

--  作者:cd_tdh
--  发布时间:2016/6/7 15:23:00
--  [求助]自动编号出错,哪儿有问题啊?
If e.DataCol.Name = "登记时间" Then If e.DataRow.IsNull("登记时间") Then e.DataRow("序号") = Nothing Else Dim bh As String = Format(e.DataRow("登记时间"),"yyyyMMdd") \'取得序号的8位前缀 If e.DataRow("序号").StartsWith(bh) = False \'如果序号的前8位不符 Dim max As String Dim idx As Integer max = e.DataTable.Compute("Max(序号)","登记时间 = #" & e.DataRow("登记时间") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大序号 If max > "" Then \'如果存在最大序号 idx = CInt(max.Substring(9,3)) + 1 \'获得最大序号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("序号") = bh & "-" & Format(idx,"000") End If End If End If 错误提示: .NET Framework 版本:2.0.50727.5485 Foxtable 版本:2015.12.22.1 错误所在事件:表,保证金管理,DataColChanged 详细错误信息: 调用的目标发生了异常。 未找到类型“Integer”的公共成员“StartsWith”。
--  作者:狐狸爸爸
--  发布时间:2016/6/7 15:30:00
--  

代码换行后发上来。

另,可以先用这个方法调试一下:

http://www.foxtable.com/help/topics/1485.htm

看看是哪一行出错。


--  作者:cd_tdh
--  发布时间:2016/6/7 15:34:00
--  

If e.DataCol.Name = "登记时间" Then
    If e.DataRow.IsNull("登记时间") Then
        e.DataRow("序号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("登记时间"),"yyyyMMdd") \'取得序号的8位前缀
        If e.DataRow("序号").StartsWith(bh) = False \'如果序号的前8位不符
            Dim  max As String
            Dim  idx As  Integer
            max = e.DataTable.Compute("Max(序号)","登记时间 = #" & e.DataRow("登记时间") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大序号
            If  max > "" Then \'如果存在最大序号
                idx = CInt(max.Substring(9,3)) + 1  \'获得最大序号的后三位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End  If
            e.DataRow("序号") = bh & "-" & Format(idx,"000")
         End If
    End  If
 End  If


图片点击可在新窗口打开查看此主题相关图片如下:111111.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2016/6/7 15:36:36编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/6/7 15:47:00
--  

问题在这一行:

 idx = CInt(max.Substring(9,3)) + 1  \'获得最大序号的后三位顺序号,并加1

 

可能你表中,原来有一些编号,这些编号不符合规范。

 

你可以清除原来的编号,然后重置登记时间列,重新生成编号。

 

接下来输入数据,看看有没有错。

 

如果还有做,做个例子发上来,我们帮你搞定


--  作者:cd_tdh
--  发布时间:2016/6/7 15:53:00
--  

我在示例里面运行没错啊,是正确的,我其他表里面运行都没问题啊,就这个表有问题。


--  作者:狐狸爸爸
--  发布时间:2016/6/7 15:55:00
--  
删除原来的编号后测试,如果搞不定,传这个表上来
--  作者:cd_tdh
--  发布时间:2016/6/7 16:07:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:11.table

在第一个窗口里面
--  作者:cd_tdh
--  发布时间:2016/6/7 16:34:00
--  
狐爸,传上来了啊,坐等。
--  作者:狐狸爸爸
--  发布时间:2016/6/7 16:42:00
--  

低级错误,序号列你设置成整数了,应该改为字符型。


--  作者:cd_tdh
--  发布时间:2016/6/7 16:45:00
--  
汗颜..................