以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]Table当前行定位问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68124)

--  作者:青鸟
--  发布时间:2015/5/10 17:18:00
--  [求助]Table当前行定位问题
请教:
我有2个Table,希望在 Table_VO报表台账 中录入新记录时,用新记录的“合同or费用编号”为关键字段,来定位Table_支付汇总 中对应的记录,并写入数据,代码如下:执行代码的时候,红色msgbox()输出的值都是正确的,并且大部分时间代码运行正确,但出现过两次向Table_支付汇总写入记录时,写到了第0行了,不知道是什么原因,请高人指点一下:

Dim id As Integer
Dim r As Row
Dim dr As DataRow
Dim dr1 As DataRow
Dim wz As Integer \'位置
Dim htbdze As String \'合同变动后总额
Dim flt As String
flt ="合同or费用编号 = \'"&forms("VO报表录入").controls("TextBox1").text &"\' And 审核状态 = \'已审定\' And 审定日期 <= \'# " & forms("VO报表录入").controls("DateTimePicker2").text  & " #\'"
With Tables("VO报表台账")
    If .Current IsNot Nothing Then
        id = Tables("VO报表台账").Current.Index
msgbox(id)
        r = Tables("VO报表台账").Rows(id)
        dr = DataTables("支付汇总").Find("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        dr1 = DataTables("合同or费用台账").Find("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        If dr IsNot Nothing Then
            wz = Tables("支付汇总").findrow(dr)
msgbox(wz)
            CurrentTable.Position = wz
            Tables("支付汇总").Current.Locked = False
            Tables("合同or费用台账").Current.Locked = False
            Tables("支付汇总").current("累计VO审定金额") = DataTables("VO报表台账").Compute("sum(审定金额)", flt)
            Tables("支付汇总").current("累计VO审定份数") = DataTables("VO报表台账").Compute("Count(审定金额)", flt)
            Tables("支付汇总").current("变更后合同or费用总额") = dr1("合同or费用总额") + Tables("支付汇总").current("累计VO审定金额")

--  作者:大红袍
--  发布时间:2015/5/10 17:32:00
--  

不严谨

 

Dim id As Integer
Dim r As Row
Dim dr As DataRow
Dim dr1 As DataRow
Dim wz As Integer \'位置
Dim htbdze As String \'合同变动后总额
Dim flt As String
flt ="合同or费用编号 = \'"&forms("VO报表录入").controls("TextBox1").text &"\' And 审核状态 = \'已审定\' And 审定日期 <= \'# " & forms("VO报表录入").controls("DateTimePicker2").text  & " #\'"
With Tables("VO报表台账")
    If .Current IsNot Nothing Then
        r = Tables("VO报表台账").Current
        Dim idx As Integer = Tables("支付汇总").FindRow("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        dr1 = DataTables("合同or费用台账").Find("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        If idx >= 0 Then
            Dim cr As Row = Tables("支付汇总").Rows(idx)

            CurrentTable.Position = idx
            cr.Locked = False
            Tables("合同or费用台账").Current.Locked = False
            cr("累计VO审定金额") = DataTables("VO报表台账").Compute("sum(审定金额)", flt)
            cr("累计VO审定份数") = DataTables("VO报表台账").Compute("Count(审定金额)", flt)
            cr("变更后合同or费用总额") = dr1("合同or费用总额") + cr("累计VO审定金额")

[此贴子已经被作者于2015/5/10 17:32:13编辑过]

--  作者:青鸟
--  发布时间:2015/5/11 10:17:00
--  
谢谢大红袍!我按照你的代码做了修改,当 Idx>=0 时没问题,但当 Idx = -1 时,我需要的是追加新记录Addnew(),但运行报错中断,“索引 -1 不是为负数,就是大于行数。”怎么办?
--  作者:Bin
--  发布时间:2015/5/11 10:19:00
--  
If idx >= 0 Then  有了这个判断不可能进入代码,也无从报错啊.



--  作者:大红袍
--  发布时间:2015/5/11 11:24:00
--  
以下是引用青鸟在2015/5/11 10:17:00的发言:
谢谢大红袍!我按照你的代码做了修改,当 Idx>=0 时没问题,但当 Idx = -1 时,我需要的是追加新记录Addnew(),但运行报错中断,“索引 -1 不是为负数,就是大于行数。”怎么办?

 

追加新记录,这样写啊

 

Dim cr As Row

If idx >= 0 Then

    cr = Tables("支付汇总").Rows(idx)

Else

    cr = Tables("支付汇总").AddNew

End If


--  作者:青鸟
--  发布时间:2015/5/11 14:46:00
--  
上面那个问题解决了,再请教:
执行了红色代码后,Tables("支付汇总")的指针是严谨了,但Tables("VO报表台账")的当前指针跟着一起动了,我现在的解决办法是把要向Tables("VO报表台账")当前行写入的数据全部拿到红色代码段前面,指针动就动了,但这样就不能写更多的这两个表之间的数据判断了,比如:我需要根据Tables("支付台账")Tables("进度报表台账")录入的数据,向Tables("支付汇总")中写入累计已付总额,再用这个累计总额来与Tables("支付台账")中的支付录入数据和Tables("进度报表台账")中的进度录入数据相比较,判断是否超支了。
能否实现主表的指针不动,而只让关联表的指针动?谢谢!

With Tables("VO报表台账")
    If .Current IsNot Nothing Then
        r = Tables("VO报表台账").Current
        Dim idx As Integer = Tables("支付汇总").FindRow("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        dr1 = DataTables("合同or费用台账").Find("合同or费用编号 = \'"& r("合同or费用编号") &"\'")
        If idx >= 0 Then
            Dim cr As Row = Tables("支付汇总").Rows(idx)

            CurrentTable.Position = idx


--  作者:大红袍
--  发布时间:2015/5/11 14:52:00
--  

 你为什么要执行这句代码?去掉不可以么?或者,你可以写到最后

 

CurrentTable.Position = idx


--  作者:青鸟
--  发布时间:2015/5/11 16:42:00
--  
哦,晕,确实多余,3Q