以文本方式查看主题
- 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表被重新加载了
从这几个原因进行排错。
|