以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=106647)

--  作者:wuchangke
--  发布时间:2017/9/13 10:43:00
--  [求助]
 

If skdc.name = "Skzd" Then                                                      \'如果改变的列是 

  For Each skdt In DataTables                                                   \'遍历所有的表

     Do While i<=sksks.count-1

         output.show("skdt.name=" & skdt.name)

         output.show("sktj(" & i & ")=" & sktj(i))

         If skdt.name=sktj( i )  Then                                             \'如果当前遍历的表

           代码

         Elseif 条件

            i=i+1

         End if

         I=i+1

     Loop

  Next

End if

上面这段代码,为什么For Each  .....Next语句没有遍历所有的表,output.show("skdt.name=" & skdt.name)输出的值只是一个?


--  作者:wuchangke
--  发布时间:2017/9/13 10:48:00
--  

Dim skdr As DataRow = e.DataRow \'返回改变的行
Dim skdc As DataCol = e.DataCol \'返回改变的列
Dim skdt As DataTable           \'定义一个全表变量,有于遍历整个表
Dim skprs As List(of String) = DataTables("Gztj").getvalues("Gcbw") \'反回统计的行的主键值以集合的形式存置
Dim sksks As List(of String) = DataTables("Gztj").getvalues("Skzd") \'以集合的形式存放施工组队的名字
Dim sktj() As String \'定义一字符型数组变量
sktj=skprs.Toarray() \'把各组工程量统计表的施工部位存在数组变量中
Dim sksc() As String \'定义一个字符型数组变量
sksc=sksks.ToArray() \'把各施工组队存于数组变量中
Dim tjrows As List(of DataRow)       \'定义一个行类型的集合变量
tjrows = DataTables("Gztj").Select("")  \'把统计表的所有行存于集合中
Dim slwg(sksks.count),sgyg(sksks.count),stongc30(sksks.count),stongc40(sksks.count),sjinxing(sksks.count) As Double
 \'定义双精度数值变量,用于计算各施工组队的对应工程量,数组元素的个数与施工队的组数一致,即由sksks.count来动态决定.
Dim i,j,r,l As Integer \'定义一组整数型变量,用作计数器(数值型变量默认值是0)
If skdc.name = "Skzd" Then                                                      \'如果改变的列是Skzd,即施工组队
  For Each skdt In DataTables                                                   \'遍历所有的表
    Do While i<=sksks.count-1
      output.show("skdt.name=" & skdt.name)
      output.show("sktj(" & i & ")=" & sktj(i))
      If skdt.name=sktj( i )  Then                                             \'如果当前遍历的表正好是各组施工队
MessageBox.show("代码执行跟踪1")                                                                                \'的工程统计部位,则统计各工程量
        For j=0 To sksks.count-1 \'
          slwg(j) = skdt.compute("sum(Sjlwg)","[Skzd]=\'" & sksc(j) & "\'")         \'计算该表中各施工队带肋钢筋工程量\'
          sgyg(j) = skdt.compute("sum(Sjgyg)","[Skzd]=\'" & sksc(j) & "\'")         \'计算该表中各施工队带肋钢筋工程量
          stongc30(j) =skdt.compute("sum(TongC30)","[Skzd]=\'" & sksc(j) & "\'")    \'计算该表中各施工队带肋钢筋工程量
          stongc40(j) = skdt.compute("sum(TongC40)","[Skzd]=\'" & sksc(j) & "\'")   \'计算该表中各施工队带肋钢筋工程量
          sjinxing(j) = skdt.compute("sum(Jinxing)","[Skzd]=\'" & sksc(j) & "\'")   \'计算该表中各施工队带肋钢筋工程量
 vars("k")=vars("k")+1

        Next                                                                      \'与For对应的循环
          i=i+1
          l=1
output.show("i=" & i)
        ElseIf skdt.name<>sktj(i) Then
          i=i+1
          output.show("代码执行跟踪2")
        End If 
        output.show("k=" & vars("k"))
 
    Loop
  Next
End If

麻烦看一下


--  作者:有点甜
--  发布时间:2017/9/13 10:53:00
--  

不满足条件呗,弹出下面的值

 

msgbox(i & "    " & sksks.count-1)


--  作者:wuchangke
--  发布时间:2017/9/13 10:56:00
--  
为什么呢,我想不出
--  作者:wuchangke
--  发布时间:2017/9/13 10:57:00
--  
For Each .....next 跳出的条件是什么?
--  作者:wuchangke
--  发布时间:2017/9/13 10:59:00
--  
i只是用来控制Do while ... Loop 循环的呀
--  作者:有点甜
--  发布时间:2017/9/13 10:59:00
--  
以下是引用wuchangke在2017/9/13 10:56:00的发言:
为什么呢,我想不出

 

你不满足这个条件

 

Do While i<=sksks.count-1

 

那自然不会执行下面的代码啊


--  作者:wuchangke
--  发布时间:2017/9/13 11:08:00
--  
这个条件符合就该执行下面代码吧?
--  作者:wuchangke
--  发布时间:2017/9/13 11:09:00
--  
不是只有这个条件不符才不执行吧
--  作者:有点甜
--  发布时间:2017/9/13 11:13:00
--  
以下是引用wuchangke在2017/9/13 11:09:00的发言:
不是只有这个条件不符才不执行吧

 

加上下面代码弹出值看看

 

msgbox(i & "    " & sksks.count-1)