以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  for问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=109048)

--  作者:Springamy
--  发布时间:2017/11/3 10:50:00
--  for问题

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
--  发布时间: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" 之后,报没有实例对象错误


--  作者:有点甜
--  发布时间: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
--  发布时间: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
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间: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
--  发布时间:2017/11/3 18:25:00
--  代码还有一点逻辑上的错误

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

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

                   posotion 一直都等于1


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


--  作者:有点甜
--  发布时间:2017/11/3 18:29:00
--  

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

 

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


--  作者:Springamy
--  发布时间:2017/11/3 19:14:00
--  

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

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

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

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

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


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


--  作者:Springamy
--  发布时间: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
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2017/11/3 20:43:00
--  
错误提示的意思是要操作的行已经不存在,原因可能是:
1、行被删除
2、所在的table表被重新筛选了
3、所在的datatable表被重新加载了

从这几个原因进行排错。