以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  在行集合里提取行在集合的位置  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=124311)

--  作者:1498351234
--  发布时间:2018/9/4 12:01:00
--  在行集合里提取行在集合的位置

老师好!

我在表中查找到了一个datatable行的集合,但在这个集合里找到一个行后,明知这个行就在这个集合里,确用  drs.indextof(dr) 提取不出来这个行的位置。不知道问题出在哪里。麻烦给看一下。谢谢!

Dim df,jf,ye,sqye As Double  \'定义贷方借方余额上期余额
Dim n,m,nn,mm,i,ii As Integer 
Dim rqxh As String   \'定义流水编号用的中间变量
Dim rq As Date
rq =   #11/30/2017#    \'指定日期
Dim drs As List(Of DataRow)                \'查找所有这个日期的记录
drs = DataTables("银行流水").Select(" [日期] = \'"  & rq  & "\' and 收款行 = \'工行长治路\'")   \'
\'msgbox(rq & "这天共有"  & drs.Count   & "记录")
Dim lsbhs As new List(of String)  \'定义将要分配的流水编号
For i =0 To drs.Count-1   \'给流水编号集合赋值
    rqxh =cstr(rq).Remove(7,1).remove(4,1).Substring(2)  &  format(i,"""_""000")  \'删除日期中的"-" ,格式化后缀序号
    If drs(i)("贷方发生额")>0 And drs(i)("收款行").contains("长治") Then     \'增加流水编号前缀
        lsbhs.add("CD" & rqxh)
    ElseIf drs(i)("借方发生额")>0 And drs(i)("收款行").contains("长治")  Then
        lsbhs.add("CJ" & rqxh)
    ElseIf drs(i)("借方发生额")>0 And drs(i)("收款行").contains("高新")  Then
        lsbhs.add("GJ" & rqxh)
    ElseIf drs(i)("贷方发生额")>0 And drs(i)("收款行").contains("高新")  Then
        lsbhs.add("GD" & rqxh)
    End If
Next
For i =0 To drs.Count-1     \'分配的编号与记录编号比对
    output.Show("记录" & drs(i)("流水编号"))
    output.Show("编号"  & lsbhs(i))
Next
If drs.Count >0  Then  \'查找上期余额的行
    For i =0 To drs.Count -1
        \' msgbox(drs.Indexof(drs(i)))
        rq = drs(i)("日期")
        ye =   drs(i)("余额")
        jf = drs(i)("借方发生额")
        df = drs(i)("贷方发生额")
        sqye  = ye - jf + df   \'计算上期余额
        Dim dr As DataRow = DataTables("银行流水").Find("[收款行]=\'工行长治路\' and [余额] =" & sqye  &  " And [日期]> = \'"  & rq.AddDays(-10)  & "\'  and  [日期] <\'"  & rq.AddDays(+1)  &  "\'" ,"日期 Desc",0 )   \'查找上期记录
        If dr IsNot Nothing Then
            If dr("日期")< rq Then
              drs(i)("流水编号") = lsbhs(0)   \'这一行屏蔽了也不行返不回在drs里的位置
                n=n+1
            ElseIf dr("日期") = rq Then
               \'drs(i)("流水编号") = lsbhs(drs.Indexof(dr)-1)) \'这是上一行在drs里面的位置-1 从编号集合里面取出来送给 drs(i)("流水编号")
                 msgbox(drs.Indexof(dr)) \'这是上一行在drs里面的位置-1 从编号集合里面取出来送给 dr("流水编号")   但在这里msgbox(drs.Indexof(dr)),总是显示-1无法取出 drs(i) 的位置.
                nn=nn+1
            End If
            m=m+1
        End If
    Next
End If
msgbox("找到记录"  &  m & "条当日记录" & nn & "条前日记录" & n & "条")

以下内容为程序代码:

1 Dim df,jf,ye,sqye As Double \'定义贷方借方余额上期余额
2 Dim n,m,nn,mm,i,ii As Integer
3 Dim rqxh As String \'定义流水编号用的中间变量
4 Dim rq As Date
5 rq = #11/30/2017# \'指定日期
6 Dim drs As List(Of DataRow) \'查找所有这个日期的记录
7 drs = DataTables("银行流水").Select(" [日期] = \'" & rq & "\' and 收款行 = \'工行长治路\'") \'
8 \'msgbox(rq & "这天共有" & drs.Count & "记录")
9 Dim lsbhs As new List(of String) \'定义将要分配的流水编号
10 For i =0 To drs.Count-1 \'给流水编号集合赋值
11 rqxh =cstr(rq).Remove(7,1).remove(4,1).Substring(2) & format(i,"""_""000") \'删除日期中的"-" ,格式化后缀序号
12 If drs(i)("贷方发生额")>0 And drs(i)("收款行").contains("长治") Then \'增加流水编号前缀
13 lsbhs.add("CD" & rqxh)
14 ElseIf drs(i)("借方发生额")>0 And drs(i)("收款行").contains("长治") Then
15 lsbhs.add("CJ" & rqxh)
16 ElseIf drs(i)("借方发生额")>0 And drs(i)("收款行").contains("高新") Then
17 lsbhs.add("GJ" & rqxh)
18 ElseIf drs(i)("贷方发生额")>0 And drs(i)("收款行").contains("高新") Then
19 lsbhs.add("GD" & rqxh)
20 End If
21 Next
22 For i =0 To drs.Count-1 \'分配的编号与记录编号比对
23 output.Show("记录" & drs(i)("流水编号"))
24 output.Show("编号" & lsbhs(i))
25 Next
26 If drs.Count >0 Then \'查找上期余额的行
27 For i =0 To drs.Count -1
28 \' msgbox(drs.Indexof(drs(i)))
29 rq = drs(i)("日期")
30 ye = drs(i)("余额")
31 jf = drs(i)("借方发生额")
32 df = drs(i)("贷方发生额")
33 sqye = ye - jf + df \'计算上期余额
34 Dim dr As DataRow = DataTables("银行流水").Find("[收款行]=\'工行长治路\' and [余额] =" & sqye & " And [日期]> = \'" & rq.AddDays(-10) & "\' and [日期] <\'" & rq.AddDays(+1) & "\'" ,"日期 Desc",0 ) \'查找上期记录
35 If dr IsNot Nothing Then
36 If dr("日期")< rq Then
37 drs(i)("流水编号") = lsbhs(0) \'这一行屏蔽了也不行返不回在drs里的位置
38 n=n+1
39 ElseIf dr("日期") = rq Then
40 \'drs(i)("流水编号") = lsbhs(drs.Indexof(dr)-1)) \'这是上一行在drs里面的位置-1 从编号集合里面取出来送给 drs(i)("流水编号")
41 msgbox(drs.Indexof(dr)) \'这是上一行在drs里面的位置-1 从编号集合里面取出来送给 dr("流水编号") 但在这里msgbox(drs.Indexof(dr)),总是显示-1无法取出 drs(i) 的位置.
42 nn=nn+1
43 End If
44 m=m+1
45 End If
46 Next
47 End If
48 msgbox("找到记录" & m & "条当日记录" & nn & "条前日记录" & n & "条")


--  作者:有点甜
--  发布时间:2018/9/4 12:10:00
--  

没办法。必须循环drs的每一行,比较各列的值,才能比较的。