Foxtable(狐表)用户栏目专家坐堂 → 关于网络编号的问题


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

主题:关于网络编号的问题

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/11/4 9:55:00 [只看该作者]

    是这样的,我的系统单号是根据,一个单号头 + 日期 +顺序号的   单号头是在另外一个表里面根据这个表名找到.

    问题是这样的,我的表可以双击打开根据这个表做的输入窗口.
    按照正常的做法,在表里面新增,先生成一个临时号码,然后保存生成一个系统单号,这个没有问题.然后利用双击打开窗口,按新增按钮产生一个临时号,然后按保存按钮,产生我需要的系统单号也没有问题.
    问题是我这个窗口利用一个主窗口控制的,主窗口在另外一个表.先利用主窗口上面的按钮,打开这个窗口,然后按这个窗口上的新增按钮,生成一个临时号码,没有问题,但是按保存按钮不会生成我需要的系统单号了   这是怎么回事?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/11/4 9:57:00 [只看该作者]

完整的代码:

Dim dr As DataRow = e.DataRow
Dim pf As String
Dim pd As String
If dr.RowState <> DataRowState.Added Then '如果不是新增行
    If e.DataRow("开单日期") = e.DataRow.OriginalValue("开单日期") Then '而且日期没有修改
        Return '那么返回
    End If
End If
If dr.IsNull("开单日期") Then '如果没有输入日期
    e.Cancel = True '取消保存此行
    MessageBox.Show("必须输入开单日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return '返回
End If
pf = Format(dr("开单日期"),"yyyyMMdd")
pd = CurrentTable.Name
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 & "'And 表名 ='" & pd & "'"
If cmd1.ExecuteScalar = 0 Then '如果系统单号表不存在前缀的行,那么增加一行
    cmd1.commandtext = "Insert Into 编号 (表名,前缀, 顺序号) Values('" & pd & "','" & pf & "',1)"
    cmd1.ExecuteNonQuery
End If
cmd1.commandText = "Select [顺序号] From [编号] Where [前缀] = '" & pf & "' And 表名 ='" & pd & "'"
Do
    Key = cmd1.ExecuteScalar() '从后台获得顺序号
    cmd2.commandText = "Update [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = '" & pf & "' And 表名 ='" & pd & "'"
    If cmd2.ExecuteNonQuery() > 0 Then '更新顺序号
        Exit Do '更新成功则退出循环
    End If
Loop
Dim dr1 As DataRow = DataTables("单号定义").Find( "表名 ='" & pd & "'")
If dr1 IsNot Nothing Then
    e.DataRow("系统单号") = dr1("单号定义")  & pf & Format(Key,"0000")
End If

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/11/4 9:58:00 [只看该作者]

那个地方需要修改.

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


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

提示:

 

代码中不应该出现CurrentTable这样的,CurrentTable表示当前表,并不一定就是触发事件的Table或DataTable。

你的代码有不少这种不严谨的地方,例如:

 

pd = CurrentTable.Name

 

 

最好全面彻查你所有的代码,不单单是这个编号的代码。

事件代码有e参数,要善用e参数,通过e参数获得触发事件的表、列、行,而不是用CurrentTable和Current这样。

[此贴子已经被作者于2011-11-4 10:19:01编辑过]

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/11/4 10:18:00 [只看该作者]

用当前表,我是想用通用代码,很多想法我都是想这样,偷懒造成的,我改一下试试? 估计有一些偷懒是不能够的.

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


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

用e参数,才是真正通用的代码。

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/11/4 10:46:00 [只看该作者]

受教,我明白了.多用e.参数.

 回到顶部
总数 37 上一页 1 2 3 4