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


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

主题:编号问题

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
编号问题  发帖心情 Post By:2023/8/28 16:21:00 [只看该作者]

新增

Dim r As Row = Tables("登记主表").addnew
r("制单日期") = Date.Today()   

Static Index As Integer = 99999
r("登记单号") = Format(Date.Today(),"yyMM") & "-" & Index
Index = Index - 1


保存
Dim dr As DataRow = Tables("登记主表").current.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 = "DDDH-" & "" & Format(dr("制单日期"), "yyyyMM")
End If
Dim cmd1 As New SQ-LCommand
Dim cmd2 As New SQ-LCommand
Dim Key As Integer
cmd1.C '设置数据源名称
cmd2.C
cmd1.commandText = "Selec-t   Count(*) From [编号] Where [前缀] = '" & pf & "'"
If cmd1.ExecuteScalar = 0 Then
    cmd1.commandtext = "Inse-rt Into 编号 (前缀, 顺序号) Values('" & pf & "',1)"
    cmd1.ExecuteNonQuery
End If
cmd1.commandText = "Selec-t [顺序号] From [编号] Where [前缀] = '" & pf & "'"
Do
    Key = cmd1.ExecuteScalar()
    cmd2.commandText = "Up-date [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = '" & pf & "'"
    If cmd2.ExecuteNonQuery() > 0 Then
        Exit Do
    End If
Loop
dr("登记单号") = pf & "-" & Format(Key, "0000") '流水号的设计)
Dim r As Row = Tables("登记主表").current
r("保存状态") = True
DataTables("登记主表").Save()
DataTables("登记明细").Save()


明细表-DataColChanged

If e.DataCol.Name = "登记单号" Then '
    If e.DataRow.IsNull("订单登记单号") Then '
        e.DataRow("订单单号") = Nothing '
    Else
        '
        Dim dr2 As DataRow
        dr2 = DataTables("登记主表").Find("[登记单号] = '" & e.NewValue & "'")
    e.DataRow("订单单号") = dr2("登记单号")
        
    End If
End If

需求:如果明细表的订单单号已录入数据,就是录入的数据保存,否则,明细表的订单单号=主表的登记单号,就是说明细的订单单号没录入数据、为空时,从主表取值,明细表的订单单号=主表的登记单号

执行上面代码,报错,如何解决?

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:表,登记明细,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/28 16:42:00 [只看该作者]

主表和明细表通过什么列进行关联对应的?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/8/28 18:28:00 [只看该作者]

主表和明细表通过登记单号列进行关联对应,是用模拟关联

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/28 20:00:00 [只看该作者]

既然通过登记单号列进行关联,那么明细表的登记单号也就等于是主表的登记单号,那么直接取明细表的登记单号不就行了,何必再去主表查?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/8/28 21:46:00 [只看该作者]

实际业务中,有一部分别人给的订单单号,有一部是没给订单单号,

如果别人给的订单单号,就手动录入订单单号,如果别人没给的订单单号,就用内定的登记单号,避免空

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/8/28 21:55:00 [只看该作者]

那就直接取明细表当前行的登记单号呀

If e.DataCol.Name = "登记单号" Then '
    If e.DataRow.IsNull("订单登记单号") Then '
    e.DataRow("订单单号") = e.DataRow("登记单号")
        
    End If
End If

 回到顶部