Foxtable(狐表)用户栏目专家坐堂 → for问题


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

主题:for问题

美女呀,离线,留言给我吧!
Springamy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
for问题  发帖心情 Post By:2017/11/3 10:50:00 [只看该作者]

Dim r6 As Row = Tables("..._Table6").Current
                For dr As DataRow = DataTables("..._Table1").DataRows
                    Dim dr5 As DataRow = DataTables("..._Table5").Find("cgid=" & dr("id"))
                    If dr5 IsNot Nothing Then
                        dr5("凭证号") = r6("凭证单据号")
                        dr5("付款确认") = True
                    Else
                        MessageBox.Show("请先申请付款!")
                    End If                    
                Next

问题描述: 批量付款窗口为独立窗口,需要给Table1的订单进行批量付款,

              并且table6当前行的凭证单据号为付款的凭证号(Table5)

              在填充了Table5的凭证号之后,会扣减Table5中当前行的剩余金额(这个已实现,我现在只需要批量填充凭证单号)

              


此主题相关图片如下:1.png
按此在新窗口浏览图片

此主题相关图片如下:2.png
按此在新窗口浏览图片

 回到顶部
美女呀,离线,留言给我吧!
Springamy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
  发帖心情 Post By:2017/11/3 11:28:00 [只看该作者]

 Dim r6 As Row = Tables("..._Table6").Current
                msgbox("测试1")
                For Each dr As DataRow In DataTables("..._Table1").DataRows
                    msgbox("测试2")
                    Dim dr5 As DataRow = DataTables("..._Table5").Find("cgid=" & dr("id"))
                    msgbox("测试3")
                    msgbox(dr("id")  & " 和 " & dr5("cgid"))
                    If dr5 IsNot Nothing Then
                        dr5("凭证号") = r6("凭证单据号")
                        dr5("付款确认") = True
                     end if

 

问题: 可以执行到 "测试3" ,后面的msgbox(dr("id")  & " 和 " & dr5("cgid")) 执行不到

        数据库中是有cgid这条数据的,select *f rom cgfk where cgid = id可以查找出来的

       执行到"测试3" 之后,报没有实例对象错误


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/3 12:07:00 [只看该作者]

Dim r6 As Row = Tables("..._Table6").Current
For Each dr As DataRow In DataTables("..._Table1").DataRows
    Dim dr5 As DataRow = DataTables("..._Table5").Find("cgid=" & dr("id"))
    If dr5 Is Nothing Then
        msgbox("没找到")
    Else
        msgbox(dr("id")  & " 和 " & dr5("cgid"))
        If dr5 IsNot Nothing Then
            dr5("凭证号") = r6("凭证单据号")
            dr5("付款确认") = True
        End If
    End If
Next

 回到顶部
美女呀,离线,留言给我吧!
Springamy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
  发帖心情 Post By:2017/11/3 16:10:00 [只看该作者]

甜大大:前面的代码在数据库用select是可以找到的,但是执行的是msgbox("没找到")

所以改成下面的代码:

但是下面的代码我只能赋值到循环的第一个 订单的凭证号,

Dim r6 As Row = Tables("..._Table6").Current

                    msgbox("测试1")

  For i As Integer = 0 To Tables("..._Table1").Rows.Count-1

                        msgbox("测试2")

        Tables("...._Table1").Position = i

        Dim dr As Row = Tables("..._Table1").Current

        Dim dr5 As DataRow = DataTables("...._Table5").Find("cgid=" & dr("id"))

                        msgbox("测试3")

                        msgbox(dr("id")  & " 和 " & dr5("cgid"))

                       

        If dr5 IsNot Nothing Then

              dr5("凭证号") = r6("凭证单据号")

              dr5("付款确认") = True

         Else

              MessageBox.Show("合同号:'" & dr("..合同号") & "'请先申请付款!")

         End If

   Next


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/3 17:19:00 [只看该作者]

Dim r6 As Row = Tables("..._Table6").Current


For Each dr As Row In Tables("..._Table1").Rows
   
    Dim drs = DataTables("...._Table5").Select("cgid=" & dr("id"))
    If drs.count > 0 Then
        For Each dr5 As DataRow In drs
           
            dr5("凭证号") = r6("凭证单据号")
           
            dr5("付款确认") = True
        Next
    Else
       
        MessageBox.Show("合同号:'" & dr("..合同号") & "'请先申请付款!")
       
    End If
Next


 回到顶部
美女呀,离线,留言给我吧!
Springamy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
代码还有一点逻辑上的错误  发帖心情 Post By:2017/11/3 18:25:00 [只看该作者]

大大,问题如图,我照着改了代码,还出现了问题,就是在循环Table的时候,Table1的当前行并没有变化,

                   所以只能找到一个数据并赋值,可是已经循环了Table1了,为嘛它的当前行不会动呢,也就是

                   posotion 一直都等于1


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/3 18:29:00 [只看该作者]

 上传实例说明吧,没搞懂你的逻辑。

 

 上传的实例,必须能正常测试。


 回到顶部
美女呀,离线,留言给我吧!
Springamy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
  发帖心情 Post By:2017/11/3 19:14:00 [只看该作者]

实例估计一天都做不好,太难了图片点击可在新窗口打开查看

如图:4个表的逻辑关系,主要是Table1和Table5有关联,currentchangged事件,Table5:Table1的关系是: cgid = id

通过独立窗口,读取 校验,过滤出了订单,并全部申请了付款,(在确认付款按钮出了问题)

我是需要把过滤出来的Table1的订单全部确认付款,前面的 '批量付款申请 '按钮,申请之后,Table5就有数据,并cgid = id,

需要把Table6当前行的凭证单据号赋值给Table5的凭证号,就已经完成了付款操作了


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看


 回到顶部
美女呀,离线,留言给我吧!
Springamy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:427 积分:2969 威望:0 精华:0 注册:2017/4/6 15:51:00
  发帖心情 Post By:2017/11/3 19:58:00 [只看该作者]

 问题描述:过滤后的订单,直接点击'批量付款并确认'按钮,table1的position 从1循环到5,并弹窗

              MessageBox.Show("单号: '" & dr("订单号") & "' 请先申请付款!")


              如果点击了"批量申请付款" 按钮,再确认,Table1 .position =0,及时我把当前行定位到

              position = 1,点击" 批量付款并确认"按钮,弹出的 position = 0,并报下图中的错误         

 

Dim r6 As Row = Tables("_Table6").Current
                msgbox("测试1")
                For i As Integer = 0 To Tables("_Table1").Rows.Count-1
                    msgbox("测试2")
                    Tables("_Table1").Position = i
                    msgbox("i = " & i)
                    Dim dr As Row = Tables("_Table1").Current
                    Dim drs = DataTables("_Table5").Select("cgid=" & dr("id"))                   
                    If drs.count > 0 Then
                        msgbox("测试3")
                        For Each dr5 As DataRow In drs
                             msgbox("测试4")

                            dr5("凭证号") = r6("凭证单据号")
                             msgbox("测试5")
                            dr5("付款确认") = True
                            dr5("系统编号") = r6("系统单号")
                            msgbox(dr5("凭证号"))
                            msgbox(dr("id")  & " 和 " & dr5("cgid"))
                        Next
                    Else
                        MessageBox.Show("单号: '" & dr("订单号") & "' 请先申请付款!")
                    End If
                Next

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:超级版主 帖子:105936 积分:538749 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/11/3 20:43:00 [只看该作者]

错误提示的意思是要操作的行已经不存在,原因可能是:
1、行被删除
2、所在的table表被重新筛选了
3、所在的datatable表被重新加载了

从这几个原因进行排错。

 回到顶部
总数 32 1 2 3 4 下一页