Foxtable(狐表)用户栏目专家坐堂 → [求助]Table当前行定位问题


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

主题:[求助]Table当前行定位问题

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


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
[求助]Table当前行定位问题  发帖心情 Post By:2015/5/10 17:18:00 [只看该作者]

请教:
我有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审定金额")

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
  发帖心情 Post By:2015/5/11 10:17:00 [只看该作者]

谢谢大红袍!我按照你的代码做了修改,当 Idx>=0 时没问题,但当 Idx = -1 时,我需要的是追加新记录Addnew(),但运行报错中断,“索引 -1 不是为负数,就是大于行数。”怎么办?

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


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

If idx >= 0 Then  有了这个判断不可能进入代码,也无从报错啊.



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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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


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


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
  发帖心情 Post By: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


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/11 14:52:00 [只看该作者]

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

 

CurrentTable.Position = idx


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


加好友 发短信
等级:幼狐 帖子:151 积分:1110 威望:0 精华:0 注册:2015/1/24 15:26:00
  发帖心情 Post By:2015/5/11 16:42:00 [只看该作者]

哦,晕,确实多余,3Q

 回到顶部