以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 自动编号 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=20708)
|
-- 作者:wilson
-- 发布时间:2012/6/17 14:37:00
-- 自动编号
我想在窗口的文本框自动编号,文本框没有绑定表与列。
我的工作原理是在文本框填写数据再保存到订单表。
求助,如何能实现在文本框自动生成订单号。
谢谢!!!
|
-- 作者:狐狸爸爸
-- 发布时间:2012/6/18 10:19:00
--
|
-- 作者:wilson
-- 发布时间:2012/6/18 12:55:00
--
问题已解决,非常感谢狐爸对我的支持
|
-- 作者:wilson
-- 发布时间:2012/7/18 19:25:00
--
狐爸您好!
我发现在窗口的文本框自动生成编号,有漏洞。 比如有一台电脑已打开窗口还没保存,另一台电脑再打开窗口,两台电脑的编号会是一样的。
我改用另一种方法,增加一个表,直接把窗口的日期与编号绑定到表,出现错误提示。
不知如何解决 ,求助,谢谢
\'在表的DataColChanged 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 & "#") \'取得该月的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(7,4)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If Dim s1 As String = "DD" e.DataRow("订单号") = s1 & bh & "-" & Format(idx,"0000") End If End If End If 此主题相关图片如下:捕获.png
|
-- 作者:狐狸爸爸
-- 发布时间:2012/7/19 6:29:00
--
多用户环境下的编号:
http://www.foxtable.com/help/topics/1994.htm
|
-- 作者:wilson
-- 发布时间:2012/7/19 12:45:00
--
我用以下代码,保存后,订单号还是为1207-99996 ,求助 ,谢谢!
\'所有需要自动编号的表的DataRowAdding事件代码依然为: Static Index As Integer = 99999 e.DataRow("订单号") = Format(Date.Today(),"yyMM") & "-" & Index Index = Index - 1
\'而BeforeSaveDataRow事件代码需要稍微调整一下,加上表名的条件:
Dim dr As DataRow = e.DataRow Dim pf As String If dr.RowState <> DataRowState.Added Then \'如果不是新增行 Return \'那么返回 ElseIf dr.IsNull("订货日期") Then \'如果没有输入日期 e.Cancel = True \'取消保存此行 MessageBox.Show("必须输入订货日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return Else pf = Format(dr("订货日期"),"yyMM") \'否则获得编号的前缀,两位年,两位月 End If Dim cmd1 As New SQLCommand Dim cmd2 As New SQLCommand Dim Key As Integer Dim nm As String = e.DataTable.name cmd1.C \'设置数据源名称 cmd2.C cmd1.commandText = "Select Count(*) From [订单号] Where [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行 cmd1.commandtext = "Insert Into 订单号 (表名, 前缀, 顺序号) Values(\'" & nm & "\',\'" & pf & "\',1)" cmd1.ExecuteNonQuery End If cmd1.commandText = "Select [顺序号] From [订单号] Where [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" Do Key = cmd1.ExecuteScalar() \'从后台获得顺序号 cmd2.commandText = "Update [订单号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号 Exit Do \'更新成功则退出循环 End If Loop Dim s1 As String = "PJ" e.DataRow("订单号") = s1 & pf & "-" & Format(Key,"0000")
|
-- 作者:wilson
-- 发布时间:2012/7/19 13:05:00
--
对不起,刚才发错了
\'而BeforeSaveDataRow事件代码需要稍微调整一下,加上表名的条件:
Dim dr As DataRow = e.DataRow Dim pf As String If dr.RowState <> DataRowState.Added Then \'如果不是新增行 Return \'那么返回 ElseIf dr.IsNull("订货日期") Then \'如果没有输入日期 e.Cancel = True \'取消保存此行 MessageBox.Show("必须输入订货日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return Else pf = Format(dr("订货日期"),"yyMM") \'否则获得编号的前缀,两位年,两位月 End If Dim cmd1 As New SQLCommand Dim cmd2 As New SQLCommand Dim Key As Integer Dim nm As String = e.DataTable.name cmd1.C \'设置数据源名称 cmd2.C cmd1.commandText = "Select Count(*) From [订单号] Where [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行 cmd1.commandtext = "Insert Into 订单号 (表名, 前缀, 顺序号) Values(\'" & nm & "\',\'" & pf & "\',1)" cmd1.ExecuteNonQuery End If cmd1.commandText = "Select [顺序号] From [订单号] Where [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" Do Key = cmd1.ExecuteScalar() \'从后台获得顺序号 cmd2.commandText = "Update [订单号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\' And 销售表 = \'" & nm & "\'" If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号 Exit Do \'更新成功则退出循环 End If Loop Dim s1 As String = "PJ" e.DataRow("订单号") = s1 & pf & "-" & Format(Key,"0000")
|
-- 作者:wilson
-- 发布时间:2012/7/19 18:19:00
--
问题已解决。
谢谢狐爸!
|