以文本方式查看主题

-  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=99785)

--  作者:yuyu060712
--  发布时间:2017/4/26 18:13:00
--  自动编号问题
.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2014.11.11.1
错误所在事件:表,转送表,DataColChanged
详细错误信息:
调用的目标发生了异常。
从字符串“4-025”到类型“Integer”的转换无效。
输入字符串的格式不正确。
老师,自动编号代码后出现这个提示,请帮忙解决

--  作者:yuyu060712
--  发布时间:2017/4/26 18:14:00
--  
Dim eb As DataRow 
    eb = DataTables("计划明细1").Find("工票编号 = \'" & e.DataRow("工票编号") & "\'")    
    If eb  IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("试样编号")= eb("试样编号")
        e.DataRow("材检编号")= eb("材检编号")
        e.DataRow("工号")= eb("工号")
        e.DataRow("部件图号")= eb("部件图号")
        e.DataRow("零件图号")= eb("零件图号")
        e.DataRow("零件名称")= eb("零件名称")
        e.DataRow("材质")= eb("材质")
        e.DataRow("数量")= eb("数量")
        e.DataRow("规格")= eb("下料尺寸") 
    End If

If e.DataCol.Name = "开具日期" Then
    If e.DataRow.IsNull("开具日期") Then
        e.DataRow("转送单号") = Nothing
    Else
        Dim d As Date = e.DataRow("开具日期")
        Dim y As Integer = d.Year
        Dim fd As Date = New Date(y,1,1) \'获得该月的第一天
        Dim ld As Date = fd.AddYears(1)
        Dim bh As String = Format(d,"yyyy") \'生成编号的前6位,4位年,2位月.
        If e.DataRow("转送单号").StartsWith(bh) = False \'如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(转送单号)","开具日期 >= #" & fd & "# And 开具日期 < #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(bh.length+1)) + 1 \'获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End If
            e.DataRow("转送单号") = bh & "-" & Format(idx,"000")
        End If
    End If

[此贴子已经被作者于2017/4/26 18:14:26编辑过]

--  作者:有点色
--  发布时间:2017/4/26 18:22:00
--  
 代码应该没有问题的,如果你【转送单号】列存在一个不正确的单号,那么会导致你代码报错的,你查询一下是否有【不一样】的单号。
--  作者:yuyu060712
--  发布时间:2017/4/26 18:25:00
--  
我将数据库的数据都删除了还是同样提示
--  作者:有点色
--  发布时间:2017/4/26 18:29:00
--  
以下是引用yuyu060712在2017/4/26 18:25:00的发言:
我将数据库的数据都删除了还是同样提示

 

不,可,能。我测试没问题。实例上传上来测试。


--  作者:yuyu060712
--  发布时间:2017/4/26 18:35:00
--  
老师,我的思路是,打开一个窗口,窗口打开时该表自动增加10行,日期为系统日期,该10行的转送单号为自动编号,其实我只要第一个自动编号,自动编号进行10行的填充,可能是那里出了问题,刚删除了数据,重新打开没有问题了,但不知道后面运行会出问题不?谢谢老师


--  作者:有点色
--  发布时间:2017/4/26 18:45:00
--  

AfterLoad事件,把代码改成

 

Dim t As Table = Tables("表A")
Dim bh As String = ""
For i As Integer = 1 To 10
    Dim nr As Row = t.AddNew
    If i = 1 Then
        nr("开具日期") = Date.Today
        bh = nr("转送单号")
    End If
    systemready = False
    nr("开具日期") = Date.Today
    nr("转送单号") = bh
    systemready = True
Next