Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共10 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
段虎成 发表于: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楼
有点蓝 发表于:2024/8/12 14:27:00
Tables("销售合同").Current.Save()
改为
e.DataRow.Save()
3楼
段虎成 发表于:2024/8/12 14:39:00
还是不行,一样的提示,还是提示“合同编号重复”
4楼
有点蓝 发表于:2024/8/12 14:51:00
这段代码没有这个提示,检查其它事件代码
5楼
段虎成 发表于:2024/8/12 15:04:00
哎,找不到其他代码,而且这段代码我只要禁用了,就不再提示了。
我再找找看。

6楼
段虎成 发表于: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楼
有点蓝 发表于: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楼
段虎成 发表于:2024/8/12 21:47:00
收到老师,谢谢
9楼
段虎成 发表于:2024/8/12 21:48:00

老师,如果出现类似的脏数据,以后我应该如何处理那?(我已经按照新的编码规则处理解决了,但是担心以后还是会出现脏数据)
10楼
有点蓝 发表于:2024/8/12 21:59:00
datacolchanging加代码判断一下,如果编号不是10位就提示并e.cancel掉
共10 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02588 s, 2 queries.