Foxtable(狐表)用户栏目专家坐堂 → 索引超出了数组界限


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

主题:索引超出了数组界限

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
索引超出了数组界限  发帖心情 Post By:2023/6/13 8:05:00 [只看该作者]

    With e.Form.Controls("textbox1")
        Dim ctn1() As String = DataTables("出入库").SQLGetComboListString("物料编号", "[出入年月] =  '" & .Value & "' and [来源] =  '" & "自做" & "'").Split("|")
        'msgbox("ctn1.length=" & ctn1.length) '数据正确
        For s1 As Integer = 0 To ctn1.length - 1
            msgbox("s1=" & s1) '这句会显示 s1 = 0, 然后出现“索引超出了数组界限”的提示

            Dim ctn2() As String = DataTables("出入库").SQLGetComboListString("出入原因", "[出入年月] =  '" & .Value & "' and [来源] =  '" & "自做" & "' and [物料编号] =  '" & ctn1(s1 - 1) & "'").Split("|")
            msgbox("ctn2.length=" & ctn2.length) 这句就不出来了。
            For s2 As Integer = 0 To ctn2.length - 1
            msgbox("s2=" & s2)

                Dim ctn3() As String = DataTables("出入库").SQLGetComboListString("不含税单价", "[出入年月] =  '" & .Value & "' and [来源] =  '" & "自做" & "' and [物料编号] =  '" & ctn1(s1 - 1) & "' and [出入原因] =  '" & ctn2(s2 - 1) & "'").Split("|")
                For s3 As Integer = 0 To ctn3.length - 1
                msgbox("s3=" & s3)
                    
                    Dim qty1 As Single = Tables("出入库").Compute("sum(入库数量)", "出入年月 = '" & .Value & "' and 来源 =  '" & "自做" & "' and 物料编号 =  '" & ctn1(s1 - 1) & "' and 出入原因 =  '" & ctn2(s2 - 1) & "' and 不含税单价 =  '" & ctn3(s3 - 1) & "' ")
                    Dim qty2 As Single = Tables("出入库").Compute("sum(出库数量)", "出入年月 = '" & .Value & "' and 来源 =  '" & "自做" & "' and 物料编号 =  '" & ctn1(s1 - 1) & "' and 出入原因 =  '" & ctn2(s2 - 1) & "' and 不含税单价 =  '" & ctn3(s3 - 1) & "' ")
            
                    Dim dr1 As DataRow = DataTables("库存明细").Find("出入年月 = '" & .Value & "' and 物料编号 =  '" & ctn1(s1 - 1) & "' and 出入原因 =  '" & ctn2(s2 - 1) & "' and 不含税单价 =  '" & ctn3(s3 - 1) & "'")
                    If dr1 IsNot Nothing Then
                    Else
                        Dim dr2 As DataRow = DataTables("库存明细").AddNew()
                        dr2("出入年月") = .Value
                        dr2("物料编号") = ctn1(s1 - 1)
                        dr2("出入原因") = ctn2(s2 - 1)
                        dr2("入库数量") = qty1

                    End If
                Next
            Next
        Next
    end with

老师好。请看上面代码里面红色部分我的说明。我想问的问题是,难道是蓝色那句有问题吗?如果是,要怎样修改?谢谢。

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


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

s1 = 0,那么s1 - 1就是-1,索引是不会有-1 的,所以【ctn1(s1 - 1)就出错了

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/6/13 11:54:00 [只看该作者]

谢谢您的提醒。还有:
Dim ctn3() As String = DataTables("出入库").SQLGetComboListString("不含税单价", "[出入年月] =  '" & .Value & "' and [来源] =  '" & "自做" & "' and [物料编号] =  '" & ctn1(s1 - 1) & "' and [出入原因] =  '" & ctn2(s2 - 1) & "'").Split("|")
这句代码是对“不含税单价”提取字符串,但是碰到不含税单价为0时就无法提取数据(就是跳过去了,当这些记录不存在)。请问有什么办法解决吗?谢谢。

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


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

单价为0其实就是没有数据,要来有什么用?这种情况如果需要自己最后补一个为0 的值不就行了

 回到顶部