以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 运行一段时间后代码运行错误 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193045) |
-- 作者:段虎成 -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间:2024/8/12 14:27:00 -- Tables("销售合同").Current.Save() 改为 e.DataRow.Save()
|
-- 作者:段虎成 -- 发布时间:2024/8/12 14:39:00 -- 还是不行,一样的提示,还是提示“合同编号重复” |
-- 作者:有点蓝 -- 发布时间:2024/8/12 14:51:00 -- 这段代码没有这个提示,检查其它事件代码 |
-- 作者:段虎成 -- 发布时间:2024/8/12 15:04:00 -- 哎,找不到其他代码,而且这段代码我只要禁用了,就不再提示了。 我再找找看。 |
-- 作者:段虎成 -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间: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) ‘学会调试!看看查询出来的最大值是什么 |
-- 作者:段虎成 -- 发布时间:2024/8/12 21:47:00 -- 收到老师,谢谢 |
-- 作者:段虎成 -- 发布时间:2024/8/12 21:48:00 -- |
-- 作者:有点蓝 -- 发布时间:2024/8/12 21:59:00 -- datacolchanging加代码判断一下,如果编号不是10位就提示并e.cancel掉 |