以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  编号问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=188033)

--  作者:lin98
--  发布时间: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
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

--  作者:有点蓝
--  发布时间:2023/8/28 16:42:00
--  
主表和明细表通过什么列进行关联对应的?
--  作者:lin98
--  发布时间:2023/8/28 18:28:00
--  
主表和明细表通过登记单号列进行关联对应,是用模拟关联
--  作者:有点蓝
--  发布时间:2023/8/28 20:00:00
--  
既然通过登记单号列进行关联,那么明细表的登记单号也就等于是主表的登记单号,那么直接取明细表的登记单号不就行了,何必再去主表查?
--  作者:lin98
--  发布时间:2023/8/28 21:46:00
--  
实际业务中,有一部分别人给的订单单号,有一部是没给订单单号,

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

--  作者:有点蓝
--  发布时间:2023/8/28 21:55:00
--  
那就直接取明细表当前行的登记单号呀

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