以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于网络编号的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=13951) |
-- 作者:布莱克朱 -- 发布时间:2011/11/2 22:51:00 -- 关于网络编号的问题 发现一个问题,我用帮助里的网络编号的例子改的代码,在表里里面新增保存一点问题都没有,但是在窗口用按钮新增以及按钮保存后,编号会将上一行已经生成的编号改变,这是怎么回事? |
-- 作者:blackzhu -- 发布时间:2011/11/3 7:54:00 -- 郁闷的不得了,我测试帮助里的例子一点问题都没有,但是我根据例子改的,一摸一样的,保存当前行的时候,上一行的编号会减少一位.当前行跟着加一位. 老大.这个是什么原因啊? 几个例子上一行是008 新增一行保存后 上一行变成了007 当前行变成了008 而且你的例子会自动升序,我的不会,但是看来看去我升了序也不行.你的升序也取消不了,什么原因啊.
|
-- 作者:狐狸爸爸 -- 发布时间:2011/11/3 7:56:00 -- 你测试帮助提供的例子,看看是否有这个问题。 |
-- 作者:blackzhu -- 发布时间:2011/11/3 8:01:00 -- 我要注意什么地方,弄了几个小时了. |
-- 作者:blackzhu -- 发布时间:2011/11/3 8:05:00 -- 就是没有呀,我测试了,只有中间改了日期后,才会有一个编号脱掉,但是这个不影响的呀.郁闷死了. 老大我的操作是这样,刚开始打开系统新增保存没有问题,但是双击打开窗口,新增,保存就会这样,按钮保存的代码是系统命令. 然后关掉窗口,再新增保存也会这样.
|
-- 作者:blackzhu -- 发布时间:2011/11/3 8:17:00 -- 老大,跟编号里面有空行搭界吗? |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/3 8:24:00 -- 原来的代码中有如下加粗的一行,按道理对于已经保存的行或者非新增行,不会有任何影响的:
Dim dr As DataRow = e.DataRow |
-- 作者:blackzhu -- 发布时间:2011/11/3 8:26:00 -- 老大我的代码是这样的. 新增: Dim dr As DataRow = DataTables("单号定义").Find( "表名 =\'" & CurrentTable.Name & "\'") If dr IsNot Nothing Then Static Index As Integer = 99999 e.DataRow("系统单号") = dr("单号定义") & Format(Date.Today(),"yyyyMMdd") & Index Index = Index - 1 End If 保存: Dim dr As DataRow = e.DataRow Dim pf As String If dr.IsNull("开单日期") Then \'如果没有输入开单日期 e.Cancel = True \'取消保存此行 MessageBox.Show("必须输入开单日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return Else pf = Format(dr("开单日期"),"yyyyMMdd") \'否则获得系统单号的前缀,两位年,两位月 End If Dim cmd1 As New SQLCommand Dim cmd2 As New SQLCommand Dim Key As Integer cmd1.C cmd2.C cmd1.commandText = "Select Count(*) From [编号] Where [前缀] = \'" & pf & "\'" If cmd1.ExecuteScalar = 0 Then \'如果系统单号表不存在前缀的行,那么增加一行 cmd1.commandtext = "Insert Into 编号 (前缀, 顺序号) Values(\'" & pf & "\',1)" cmd1.ExecuteNonQuery End If cmd1.commandText = "Select [顺序号] From [编号] Where [前缀] = \'" & pf & "\'" Do Key = cmd1.ExecuteScalar() \'从后台获得顺序号 cmd2.commandText = "Update [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\'" If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号 Exit Do \'更新成功则退出循环 End If Loop Dim dr1 As DataRow = DataTables("单号定义").Find( "表名 =\'" & CurrentTable.Name & "\'") If dr1 IsNot Nothing Then e.DataRow("系统单号") = dr1("单号定义") & pf & Format(Key,"0000") End If 我把如果是新增就返回的去掉了,不去掉,我不能按时间修改编号. 你帮我看看,这个不解决好,我做不了其它的,纠结!
|
-- 作者:blackzhu -- 发布时间:2011/11/3 8:27:00 -- 几乎是一摸一样,只是加了个头而已! |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/3 8:36:00 -- 如果简单地去掉,等于每次保存,修改过其他列,但是日期没有修改的行,也会重新编号。 你可以判断日期是否修改过,才决定是否重新生成编号:
http://www.foxtable.com/help/topics/2369.htm
|