以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]停止工作怎么破?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97769)

--  作者:ajie5211
--  发布时间:2017/3/18 9:12:00
--  [求助]停止工作怎么破?
这个错误怎么破?
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20170318091026.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20170318091036.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20170318091042.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2017/3/18 9:57:00
--  

参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=96796

 


--  作者:ajie5211
--  发布时间:2017/3/18 10:21:00
--  
以下是引用有点蓝在2017/3/18 9:57:00的发言:

参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=96796

 

  用了暂停执行事件代码

SystemReady = False
Try
\'追加数据代码
Catch ex
As Exception
    MessageBox.Show(
"追加数据失败")
End
Try
SystemReady =
True

后正常了。但哪个DataRows不知道啥时候会出问题,郁闷的很啊。还希望早日解决这个问题。


--  作者:有点蓝
--  发布时间:2017/3/18 10:51:00
--  
什么DataRows的问题?贴出你问这代码看看
--  作者:ajie5211
--  发布时间:2017/3/18 11:30:00
--  
以下是引用有点蓝在2017/3/18 10:51:00的发言:
什么DataRows的问题?贴出你问这代码看看

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=97234&replyID=&skin=1

这个遍历问题。


--  作者:ajie5211
--  发布时间:2017/3/18 11:34:00
--  

Select Case e.DataCol.Name
    Case "品名料号"
        If e.NewValue Is Nothing Then
            For Each cl As DataCol In e.DataTable.DataCols
                e.DataRow(cl) = Nothing
            Next
        Else
            Dim dr As DataRow = DataTables("tabDIYTable24").SQLFind("F124 = \'" & e.DataRow("品名料号") & "\'")
            If dr IsNot Nothing AndAlso e.DataRow.IsNull("ID") Then
                e.DataRow("ID") = dr("ID")
                e.DataRow("品名规格") = dr("F125")
                e.DataRow("产品备注") = dr("F130")
            End If
            Dim drs As List(of DataRow) = DataTables("tabDIYTable29").SQLSelect("ID = " & e.DataRow("ID"))
            If drs.Count > 0 Then
                e.DataRow("仓库名称") = drs(0)("F160")
                e.DataRow("现有库存") = drs(0)("F162")
                If drs(0)("F166") <> #1/1/1900# Then
                    e.DataRow("最近入库日期") = drs(0)("F166")
                End If
                If drs(0)("F165") <> #1/1/1900# Then
                    e.DataRow("最近出库日期") = drs(0)("F165")
                End If
                e.DataRow("最低库存") = drs(0)("F2429")
                e.DataRow("最高库存") = drs(0)("F2430")
                Dim zxr As Date = drs(0)("F165")
                If zxr.AddDays(93) < Date.Today And e.DataRow("现有库存") > 0 Then
                    e.DataRow("销售状态") = "滞销"
                Else
                    e.DataRow("销售状态") = ""
                End If
                \'DataTables("产品月季总出货量").LoadFilter = "[产品料号] = \'" & e.DataRow("品名料号") & "\' And [仓库名称] = \'" & e.DataRow("仓库名称") & "\'"
                \'DataTables("产品月季总出货量").Load
                e.DataRow("最高月用量") = DataTables("产品月季总出货量").SQLCompute("MAX(总出货量)", "[产品料号] = \'" & e.DataRow("品名料号") & "\' And [仓库名称] = \'" & e.DataRow("仓库名称") & "\'and [月季份] = \'月\'")
                e.DataRow("平均季用量") = DataTables("产品月季总出货量").SQLCompute("AVG(总出货量)", "[产品料号] = \'" & e.DataRow("品名料号") & "\' And [仓库名称] = \'" & e.DataRow("仓库名称") & "\'and [月季份] = \'季\'")
                SystemReady = False
                Try
                For i As Integer = 1 To drs.Count - 1
                    Dim edr As DataRow = e.DataTable.DataRows.AddNew()
                    edr("ID") = e.DataRow("ID")
                    edr("品名料号") = e.DataRow("品名料号")
                    edr("品名规格") = e.DataRow("品名规格")
                    edr("产品备注") = e.DataRow("产品备注")
                    edr("仓库名称") = drs(i)("F160")
                    edr("现有库存") = drs(i)("F162")
                    If drs(i)("F166") <> #1/1/1900# Then
                        edr("最近入库日期") = drs(i)("F166")
                    End If
                    If drs(i)("F165") <> #1/1/1900# Then
                        edr("最近出库日期") = drs(i)("F165")
                    End If
                    edr("最低库存") = drs(i)("F2429")
                    edr("最高库存") = drs(i)("F2430")
                    Dim zxr1 As Date = drs(i)("F165")
                    If zxr1.AddDays(93) < Date.Today And edr("现有库存") > 0 Then
                        edr("销售状态") = "滞销"
                    Else
                        edr("销售状态") = ""
                    End If
                    edr("最高月用量") = DataTables("产品月季总出货量").SQLCompute("MAX(总出货量)", "[产品料号] = \'" & edr("品名料号") & "\' And [仓库名称] = \'" & edr("仓库名称") & "\'and [月季份] = \'月\'")
                    edr("平均季用量") = DataTables("产品月季总出货量").SQLCompute("AVG(总出货量)", "[产品料号] = \'" & edr("品名料号") & "\' And [仓库名称] = \'" & edr("仓库名称") & "\'and [月季份] = \'季\'")
                Next
                Catch ex As Exception
                    MessageBox.Show("追加数据失败")
                End Try
                SystemReady = True
                CurrentTable.Sort = ""
                With Tables("单独库存查询")
                    .MergeMode = MergeModeEnum.Free
                    .MergeCols.Clear()
                    .MergeCols.Add("品名规格")
                    .MergeSort = "品名料号 DESC"
                    .AllowMerge = True
                End With
            End If
        End If
End Select

这是我目前的代码,如果不用SystemReady,就会停止工作。升级2017前就是不用SystemReady到也不会停止工作,升级后,肯定停止工作。


--  作者:有点蓝
--  发布时间:2017/3/18 11:51:00
--  

SystemReady 影响到DataRows.Count的问题最新版的2017已经解决的了,下面地址重新下载更新

 

开发版和商业版用户的下载地址:
http://www.foxtable.com/update/how.htm

 

如果使用了Try包住就没有问题,说明你的代码逻辑肯定有问题,抛出错误看看

 

 Catch ex As Exception
                   MessageBox.Show(ex.Message)
                End Try


--  作者:有点蓝
--  发布时间:2017/3/18 11:52:00
--  

 Dim edr As DataRow = e.DataTable.DataRows.AddNew()

改为

 

 Dim edr As DataRow = e.DataTable.AddNew()

 

没有e.DataTable.DataRows.AddNew()这种用法


--  作者:有点蓝
--  发布时间:2017/3/18 11:54:00
--  

非常不建议在表事件中对当前表批量增加行,非常容易形成死循环。

 

这种逻辑适合在按钮中处理