以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]未将对象引用设置到对象的实例  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78845)

--  作者:huhu
--  发布时间:2015/12/18 11:15:00
--  [求助]未将对象引用设置到对象的实例
If e.DataCol.name = "提示" Then
    If e.DataRow("提示") = "出库完成"  Then
        Dim dr As DataRow = DataTables("库存明细表").Find("SN = \'" & e.DataRow("SN") & "\'")
        If dr IsNot Nothing Then
            \'dr("发货单号") = e.DataRow("发货单号")
            msgbox(3)
            dr("提示") = "出库完成"----------------弹出库存明细表未将对象引用设置到对象的实例
            msgbox(4)
            dr("出库扫描时间") = Date.now----------------弹出库存明细表未将对象引用设置到对象的实例
            msgbox(5)
        End If
    End If
End If

可是库存明细表的提示和出库扫描时间都已经修改正确了啊。怎么会冒出未将对象引用设置到对象实例?是哪里不对?

--  作者:huhu
--  发布时间:2015/12/18 11:41:00
--  
自己顶一下。
--  作者:大红袍
--  发布时间:2015/12/18 11:55:00
--  

去看你的 库存明细表 的datacolchanged事件。你修改值的时候,会对应的触发事件啊


--  作者:huhu
--  发布时间:2015/12/18 11:57:00
--  
在库存明细表,发生变化的应该是SN,不应该是其它的吧。代码如下:

Dim kwbm As WinForm.TextBox = Forms("入库扫描").Controls("TextBox1")
If e.DataCol.Name = "SN" Then
    If e.DataRow("SN").contains("-") Then
        kwbm.value = e.DataRow("SN")
        e.DataRow("SN") = Nothing
    Else
        Dim nms() As String = {"SN","数量","物料编码","产品型号","类别","产品态","配货单号","工单号","订单号","预入库单号","生产完成日期","入库单号","库位号"}
        If e.NewValue Is Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = Nothing
            Next
        Else
            Dim drs As List(Of DataRow) = DataTables("待入库").Select("[SN] = \'" & e.NewValue & "\'")
            If drs.Count > 0 Then
                SystemReady = False
                For Each dr As DataRow In drs
                    Dim ndr As DataRow = e.DataTable.AddNew
                    Dim max As String
                    Dim idx As Integer
                    max = e.DataTable.Compute("Max(扫描顺序)")
                    If max > "" Then
                        idx = CInt(max) + 1
                    Else
                        idx = 1
                    End If
                    ndr("扫描顺序") = idx
                    If dr("入库提示") = "入库完成" Then
                        For Each nm As String In nms
                            ndr(nm) = dr(nm)
                        Next
                        ndr("提示") = "重复扫描入库"
                        dr("入库提示") = "入库完成"
                        ndr("库位编码") = kwbm.Value
                    Else
                        For Each nm As String In nms
                            ndr(nm) = dr(nm)
                        Next
                        If ndr("预入库单号") <> ndr("入库单号")  Then
                            ndr("提示") = "非本入库单物料"
                            ndr("库位编码") = kwbm.Value
                        Else
                            ndr("提示") = "入库完成"
                            dr("入库提示") = "入库完成"
                            ndr("库位编码") = kwbm.Value
                            ndr("入库结束日期") = Date.now
                            msgbox(6)
                            If ndr.GetChildRows("库位数量统计").Count = 0 Then
                                If ndr.IsNull("产品型号") Then
                                    Dim ddr2 As DataRow = DataTables("库位数量统计").Find("物料编码 = \'" & ndr("物料编码") & "\'")
                                    If ddr2 IsNot Nothing Then
                                        If ddr2("库位编码") = ndr("库位编码") Then
                                            ddr2("数量") = ddr2("数量") + 1
                                        Else
                                            Dim ddr3 As  DataRow = DataTables("库位数量统计").AddNew()
                                            ddr3("物料编码") = ndr("物料编码")
                                            ddr3("库位编码") = ndr("库位编码")
                                            ddr3("库位号") = ndr("库位号")
                                            ddr3("订单号") = ndr("订单号")
                                            ddr3("数量") = 1
                                            ddr3("产品态") = ndr("产品态")
                                        End If
                                        msgbox(7)
                                    Else
                                        Dim ddr1 As DataRow = DataTables("库位数量统计").AddNew()
                                        ddr1("物料编码") = ndr("物料编码")
                                        ddr1("库位编码") = ndr("库位编码")
                                        ddr1("库位号") = ndr("库位号")
                                        ddr1("订单号") = ndr("订单号")
                                        ddr1("产品态") = ndr("产品态")
                                        ddr1("数量") = 1
                                    End If
                                Else
                                    Dim ddr2 As DataRow = DataTables("库位数量统计").Find("物料编码 = \'" & ndr("物料编码") & "\' and 产品型号 = \'" & ndr("产品型号") & "\'")
                                    If ddr2 IsNot Nothing Then
                                        If ddr2("库位编码") = ndr("库位编码") Then
                                            ddr2("数量") = ddr2("数量") + 1
                                        Else
                                            Dim ddr3 As  DataRow = DataTables("库位数量统计").AddNew()
                                            ddr3("物料编码") = ndr("物料编码")
                                            ddr3("库位编码") = ndr("库位编码")
                                            ddr3("库位号") = ndr("库位号")
                                            ddr3("订单号") = ndr("订单号")
                                            ddr3("产品型号") = ndr("产品型号")
                                            ddr3("数量") = 1
                                            ddr3("产品态") = ndr("产品态")
                                        End If
                                    Else
                                        Dim ddr1 As DataRow = DataTables("库位数量统计").AddNew()
                                        ddr1("物料编码") = ndr("物料编码")
                                        ddr1("库位编码") = ndr("库位编码")
                                        ddr1("库位号") = ndr("库位号")
                                        ddr1("订单号") = ndr("订单号")
                                        ddr1("产品型号") = ndr("产品型号")
                                        ddr1("产品态") = ndr("产品态")
                                        ddr1("数量") = 1
                                    End If
                                End If
                            End If
                        End If
                    End If
                Next
                e.DataRow.Delete
                SystemReady = True
            Else
                e.DataRow("提示") = "序列号不存在"
            End If
        End If
    End If
End If

--  作者:大红袍
--  发布时间:2015/12/18 12:37:00
--  
汗,提示列、出库扫描时间列的值改变了啊
--  作者:huhu
--  发布时间:2015/12/18 17:24:00
--  
具体是那段代码出错了?如何改掉,我仅仅想把这2列的值用新的值替换掉而已。并没有想让他触发事件。
--  作者:大红袍
--  发布时间:2015/12/18 17:28:00
--  

那你可以暂停触发事件

 

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