Foxtable(狐表)用户栏目专家坐堂 → 自动编号


  共有7536人关注过本帖树形打印复制链接

主题:自动编号

帅哥哟,离线,有人找我吗?
wilson
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
自动编号  发帖心情 Post By:2012/6/17 14:37:00 [只看该作者]

我想在窗口的文本框自动编号,文本框没有绑定表与列。

我的工作原理是在文本框填写数据再保存到订单表。

求助,如何能实现在文本框自动生成订单号。

  谢谢!!!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.rar


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/6/18 10:19:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.table


 回到顶部
帅哥哟,离线,有人找我吗?
wilson
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By:2012/6/18 12:55:00 [只看该作者]

问题已解决,非常感谢狐爸对我的支持


 回到顶部
帅哥哟,离线,有人找我吗?
wilson
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By: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
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/7/19 6:29:00 [只看该作者]

多用户环境下的编号:

http://www.foxtable.com/help/topics/1994.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
wilson
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By:2012/7/19 18:19:00 [只看该作者]

问题已解决。

谢谢狐爸!


 回到顶部