以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 自动编号 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128698)
|
-- 作者:13775189031
-- 发布时间:2018/12/13 10:57:00
-- 自动编号
项目放在服务器上,按照下面的编号方法,现在会出现重号,要怎么改?
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 m As Integer = d.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyyMM") \'生成编号的前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(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("预算编号") ="WZ-FJ-" & bh & "-" & Format(idx,"000") e.DataRow.Save End If End If End If
|
-- 作者:有点甜
-- 发布时间:2018/12/13 11:20:00
--
参考
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=128569&skin=0
|
-- 作者:13775189031
-- 发布时间:2018/12/13 11:47:00
--
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 m As Integer = d.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyyMM") \'生成编号的前6位,4位年,2位月. If e.DataRow("预算编号").StartsWith(bh) = False \'如果编号的前6位不符 Dim max As String Dim idx As Integer max = e.DataTable.sqlCompute("Max(预算编号)","编制日期 >= #" & fd & "# And 编制日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号 msgbox(max) If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("预算编号") ="WZ-FJ-" & bh & "-" & Format(idx,"000") e.DataRow.Save End If End If End If
放在datarowadding里?
我是放在datacolchanged!
|
-- 作者:有点甜
-- 发布时间:2018/12/13 12:00:00
--
执行下面的代码,看能否得到正常结果。
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 m As Integer = d.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyyMM") \'生成编号的前6位,4位年,2位月. If e.DataRow("预算编号").StartsWith(bh) = False \'如果编号的前6位不符 Dim max As String Dim idx As Integer max = e.DataTable.sqlCompute("Max(预算编号)","编制日期 >= \'" & fd & "\' And 编制日期 <= \'" & ld & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号 msgbox(max) If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("预算编号") ="WZ-FJ-" & bh & "-" & Format(idx,"000") e.DataRow.Save End If End If End If
|
-- 作者:13775189031
-- 发布时间:2018/12/13 12:22:00
--
放在datacolchanged: .NET Framework 版本:2.0.50727.8793 Foxtable 版本:2018.10.9.1 错误所在事件: 详细错误信息: 标准表达式中数据类型不匹配。
|
-- 作者:有点甜
-- 发布时间:2018/12/13 12:25:00
--
access数据库,改成
max = e.DataTable.sqlCompute("Max(预算编号)","编制日期 >= #" & fd & "# And 编制日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号
|
-- 作者:13775189031
-- 发布时间:2018/12/13 12:48:00
--
项目事件中Initialize中添加如下代码
For Each dt As DataTable In DataTables
dt.GlobalHandler.DataRowAdded = True \'使能全部表事件中的行增加事件
Next
全局表事件中datarowadded添加如下代码
e.DataTable.Save()
Syscmd.Row.Load()
参考里的这两段还要加么?
|
-- 作者:有点蓝
-- 发布时间:2018/12/13 14:56:00
--
不需要
|
-- 作者:13775189031
-- 发布时间:2018/12/20 16:01:00
--
Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "生产令号" If dr.IsNull("生产令号") Then dr("制单日期") = Nothing Else dr("制单日期") = Date.today End If End Select
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 m As Integer = d.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyyMM") \'生成编号的前6位,4位年,2位月. If e.DataRow("零部件编号").StartsWith(bh) = False \'如果编号的前6位不符 Dim max As String Dim idx As Integer max = e.DataTable.sqlCompute("Max(零部件编号)","制单日期 >= #" & fd & "# And 制单日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(9,4)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("零部件编号") = "JG" & bh & "-" & Format(idx,"0000") e.DataRow.Save End If End If End If
现在的问题:生成零部件编号以后
若“生产令号”变化,“制单日期”会更新至最新日期,导致“零部件编号”随之变化,
如何更改,在生成零部件编号后,更改“生产令号”,“制单日期”不会变化?
|
-- 作者:有点甜
-- 发布时间:2018/12/20 18:29:00
--
判断【零部件编号】是否为空,为空的情况下,才生成
If e.DataCol.Name = "制单日期" andalso e.DataRow("零部件编号") <> nothing Then
|