老师好,下面代码,一致没有问题,这几天只要增加行,输入日期,就提示“合同编号重复!”,我重新建一个项目,使用下面代码也都是正常的。为什么会这样那?
而且,下面代码也没有 “合同编号重复”的输出窗口提示。
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
哎,找不到其他代码,而且这段代码我只要禁用了,就不再提示了。
我再找找看。
老师,提示信息找到了,在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
应该是合同编号出现了脏数据,比如本来应该全部是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) ‘学会调试!看看查询出来的最大值是什么
老师,如果出现类似的脏数据,以后我应该如何处理那?(我已经按照新的编码规则处理解决了,但是担心以后还是会出现脏数据)