Foxtable(狐表)用户栏目专家坐堂 → 运行一段时间后代码运行错误


  共有1770人关注过本帖树形打印复制链接

主题:运行一段时间后代码运行错误

帅哥哟,离线,有人找我吗?
段虎成
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
运行一段时间后代码运行错误  发帖心情 Post By:2024/8/12 14:23:00 [只看该作者]

老师好,下面代码,一致没有问题,这几天只要增加行,输入日期,就提示“合同编号重复!”,我重新建一个项目,使用下面代码也都是正常的。为什么会这样那?
而且,下面代码也没有 “合同编号重复”的输出窗口提示。



Select Case e.DataCol.Name
    Case "签约时间"
        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 bh As String = Format(d, "yyyy") '生成编号的前4位,4位年
                If e.DataRow("合同编号").StartsWith(bh) = False Then'如果编号的前4位不符
                    Dim max As String
                    Dim idx As Integer
                    max = e.DataTable.SQLCompute("Max(合同编号)", "[_Identify] <> " & e.DataRow("_Identify")) 
                    If max > "" Then '如果存在最大编号
                        idx = CInt(max.Substring(4, 6)) + 1 '获得最大编号的后三位顺序号,并加1
                    Else
                        idx = 1 '否则顺序号等于1
                    End If
                    e.DataRow("合同编号") = bh & Format(idx, "000000")
                    Tables("销售合同").Current.Save()
                End If
            End If
        End If
End Select 


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111402 积分:567080 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/12 14:27:00 [只看该作者]

Tables("销售合同").Current.Save()
改为
e.DataRow.Save()

 回到顶部
帅哥哟,离线,有人找我吗?
段虎成
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
  发帖心情 Post By:2024/8/12 14:39:00 [只看该作者]

还是不行,一样的提示,还是提示“合同编号重复”

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111402 积分:567080 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/12 14:51:00 [只看该作者]

这段代码没有这个提示,检查其它事件代码

 回到顶部
帅哥哟,离线,有人找我吗?
段虎成
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
  发帖心情 Post By:2024/8/12 15:04:00 [只看该作者]

哎,找不到其他代码,而且这段代码我只要禁用了,就不再提示了。
我再找找看。


 回到顶部
帅哥哟,离线,有人找我吗?
段虎成
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
  发帖心情 Post By:2024/8/12 18:02:00 [只看该作者]


老师,提示信息找到了,在datacolchanging代码中, 这个代码应该是没问题。

这个代码我取消之后,发现datacolchanged在运行的时候,生成的合同编号一直不变,都是最后一个合同编号,所以导致提示“合同编号重复”,但是自动编码的代码没有动过,不知道为什么使用一段时间后出现这个问题。还未解决。

If e.DataCol.Name = "合同编号" Then
    Dim dr As DataRow
    dr = e.DataTable.SQLFind("合同编号 = '" & e.NewValue & "'")
    If dr IsNot Nothing Then
        MessageBox.Show("合同编号重复!")
        e.Cancel = True
    End If
End If


 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111402 积分:567080 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/12 20:12:00 [只看该作者]

应该是合同编号出现了脏数据,比如本来应该全部是10位的编号,可能错录入了9位、11位的编号

另外如果是按年生成的编号,查询的时候也应该去判断一下年份
                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 = New Date(y,12,31) 
'
获得该的最后一天
max = e.DataTable.SQLCompute("Max(合同编号)", "日期 >= '" & fd & "' And 日期 <= '" & ld & "' And [_Identify] <> " & e.DataRow("_Identify")) 
msgbox(max) ‘学会调试!看看查询出来的最大值是什么


 回到顶部
帅哥哟,离线,有人找我吗?
段虎成
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
  发帖心情 Post By:2024/8/12 21:47:00 [只看该作者]

收到老师,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
段虎成
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:446 积分:3234 威望:0 精华:0 注册:2019/11/18 9:44:00
  发帖心情 Post By:2024/8/12 21:48:00 [只看该作者]


老师,如果出现类似的脏数据,以后我应该如何处理那?(我已经按照新的编码规则处理解决了,但是担心以后还是会出现脏数据)

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111402 积分:567080 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/12 21:59:00 [只看该作者]

datacolchanging加代码判断一下,如果编号不是10位就提示并e.cancel掉

 回到顶部