Foxtable(狐表)用户栏目专家坐堂 → 超出索引范围的问题


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

主题:超出索引范围的问题

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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
超出索引范围的问题  发帖心情 Post By:2013/6/13 21:53:00 [只看该作者]

在表“库存透视及取货方案”的“出库数量”中输入“20”,在表“取货明细”中能正常显示取货数量和箱号,可是输入“21”或"22"就会报错。问题出在表“库存透视及取货方案”datacolchanged事件代码的“ Case "取货方案_1","产品条码" " 中,我已标明了位置。

请专家帮帮忙,指出问题在什么地方。先谢了!

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:例子.foxdb


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/6/13 22:55:00 [只看该作者]

直接贴代码!


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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/6/13 23:27:00 [只看该作者]

沒詳細看,不過有個錯誤很明顯:同一SELECT CASE下, 下面的CASE "產品條碼"重疊了,則只會執行執行第一個 Case "产品条码"!
後面的"产品条码"變化時是不會執行的

Case "产品条码"
'
Case "出库数量","产品条码"
'
Case "取货方案_1","产品条码"
'
Case "取货方案_2","产品条码" 
'
Case "取货方案_3","产品条码"  

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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/6/14 16:17:00 [只看该作者]

    Case "取货方案_1","产品条码"                                                                             '错误代码起始
        Dim drs As List (Of DataRow)
        Dim dr As DataRow
        Dim dr1 As DataRow
        Dim Int As Integer = e.DataRow("取货方案_1")
        Dim Int1 As Integer
        Dim filter As String = "库存_库房号 ='1'  And 产品条码 = '" & e.DataRow("产品条码") & "'"
        Dim id As String = "And [_identify] <> -1"
        If e.DataRow.IsNull("取货方案_1") = False Then
            Do While Int > 0
                drs = DataTables("库存表").Select(filter & id & "And 库存数量 >= " & Int)
                Int1 = Math.Abs(drs(0)("库存数量") - Int)
                For i As Integer = 1 To drs.count - 1
                    Int1 = Math.Min(Int1,Math.Abs(drs(i)("库存数量") - Int))
                Next
                dr = DataTables("库存表").Find(filter & id & "And 库存数量 = " & Int + Int1)
                If dr IsNot Nothing
                    dr1 = DataTables("取货明细").AddNew()
                    dr1("取货_数量") = Int
                    dr1("取货_箱号") = dr("库存_装箱号")
                    Int = 0
                Else
                    drs = DataTables("库存表").Select(filter & id & "And 库存数量 < " & Int)
                    Int1 =Int - drs(0)("库存数量")
                    For i As Integer = 1 To drs.count - 1
                        Int1 = Math.Min(Int1,Int-drs(i)("库存数量"))
                    Next
                    dr = DataTables("库存表").Find(filter &  id & " And 库存数量 = " & Int - Int1)
                    If dr IsNot Nothing Then
                        dr1 = DataTables("取货明细").AddNew()
                        dr1("取货_数量") = dr("库存数量")
                        dr1("取货_箱号") = dr("库存_装箱号")
                        Int = Int1                       
                        If id = "And [_identify] <> -1" Then
                            id = "And [_identify] <> " & dr("_identify")
                        Else
                            id = id & "And [_identify] <> " & dr("_identify")
                        End If
                    End If
                End If
            Loop
        End If  

 

那就有劳了!

 


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/14 16:58:00 [只看该作者]

Case "取货方案_1","产品条码"                                                                             '错误代码起始
        Dim drs As List (Of DataRow)
        Dim dr As DataRow
        Dim dr1 As DataRow
        Dim Int As Integer = e.DataRow("取货方案_1")
        Dim Int1 As Integer
        Dim filter As String = "库存_库房号 ='1'  And 产品条码 = '" & e.DataRow("产品条码") & "'"
        Dim id As String = "And [_identify] <> -1"
        If e.DataRow.IsNull("取货方案_1") = False Then
            Do While Int > 0
                drs = DataTables("库存表").Select(filter & id & "And 库存数量 >= " & Int)
                Int1 = Math.Abs(drs(0)("库存数量") - Int)    如果Select出来的行数为0的话.你就无法获得第一行 那么就报错
                For i As Integer = 1 To drs.count - 1
                    Int1 = Math.Min(Int1,Math.Abs(drs(i)("库存数量") - Int))
                Next
                dr = DataTables("库存表").Find(filter & id & "And 库存数量 = " & Int + Int1)
                If dr IsNot Nothing
                    dr1 = DataTables("取货明细").AddNew()
                    dr1("取货_数量") = Int
                    dr1("取货_箱号") = dr("库存_装箱号")
                    Int = 0
                Else
                    drs = DataTables("库存表").Select(filter & id & "And 库存数量 < " & Int)
                    Int1 =Int - drs(0)("库存数量")
                    For i As Integer = 1 To drs.count - 1
                        Int1 = Math.Min(Int1,Int-drs(i)("库存数量"))
                    Next
                    dr = DataTables("库存表").Find(filter &  id & " And 库存数量 = " & Int - Int1)
                    If dr IsNot Nothing Then
                        dr1 = DataTables("取货明细").AddNew()
                        dr1("取货_数量") = dr("库存数量")
                        dr1("取货_箱号") = dr("库存_装箱号")
                        Int = Int1                        
                        If id = "And [_identify] <> -1" Then
                            id = "And [_identify] <> " & dr("_identify")
                        Else
                            id = id & "And [_identify] <> " & dr("_identify")
                        End If
                    End If
                End If
            Loop
        End If  

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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/6/14 17:17:00 [只看该作者]

那么,

是否加上

if drs.count > 0 then

判断一下就可以了?


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/14 17:18:00 [只看该作者]

判断一下 drs  是否为NOthing  只要不是空就说明肯定有至少一行  那么drs(0)就不会报错

 回到顶部