以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]表内无记录时新增行出错  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=135559)

--  作者:沪上游客
--  发布时间:2019/5/29 13:29:00
--  [求助]表内无记录时新增行出错
老师你好!
如果表中没有记录时新增记录会提示报错(如图),应该是在新增行时触发了表DataColChanged事件,如果有一条记录以上就不会报错。
请问如何设置代码?
是不是可以设置在表没有记录时新增行可以不触发DataColChanged 事件?新增后编缉时可以正常执行DataColChanged
代码应该怎么写?
谢谢老师!

图片点击可在新窗口打开查看此主题相关图片如下:运行错误提示.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2019/5/29 13:29:55编辑过]

--  作者:有点甜
--  发布时间:2019/5/29 13:30:00
--  
贴出datacolchanged事件代码。
--  作者:沪上游客
--  发布时间:2019/5/29 13:33:00
--  
If e.DataCol.Name = "主合同编号" Then
    If e.DataRow.IsNull("记录编号") Then
        If e.DataRow.IsNull("录入日期") Then
            e.DataRow("记录编号") = Nothing
        Else
            Dim bh As String = "YSK" & Format(e.DataRow("录入日期"),"yyyyMMdd") \'取得编号的11位前缀
            If e.DataRow("记录编号").StartsWith(bh) = False \'如果编号的前11位不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.sqlCompute("Max(记录编号)","录入日期 = \'" & e.DataRow("录入日期") & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(12,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("记录编号") = bh & "-" & Format(idx,"000")
                e.DataRow.Save
            End If
        End If
    End If
End If


--  作者:沪上游客
--  发布时间:2019/5/29 13:33:00
--  
Select Case e.DataCol.name
    Case "记录编号"
        If e.DataRow.IsNull("记录编号") Then
            e.Cancel = True
        Else
            Dim dr As DataRow = DataTables("项目资金管理").SQLFind("记录编号 = \'" & e.DataRow("记录编号") & "\'")
            If dr Is Nothing Then
                dr = DataTables("项目资金管理").AddNew()
                dr("记录编号") = e.DataRow("记录编号")
                dr("主合同编号") = e.DataRow("主合同编号")
                dr("结算方式") = e.DataRow("结算方式")
                dr("工程款收款") = e.DataRow("收入收款")
                dr("项目借款_借入") = e.DataRow("收入收款")
                dr("录入日期") = e.DataRow("录入日期")
                dr("日期") = e.DataRow("单据日期")
                dr("录入人") = e.DataRow("录入人")
                dr("项目借款_类别") = "收入工程款"
                dr("摘要") = "甲方单位:" & e.DataRow("甲方名称")
                dr.Save()
            End If
        End If
    Case "主合同编号","收入收款","单据日期"
        Dim dr As DataRow = DataTables("项目资金管理").SQLFind("记录编号 = \'" & e.DataRow("记录编号") & "\'")
        If dr IsNot Nothing Then
            dr("主合同编号") = e.DataRow("主合同编号")
            dr("结算方式") = e.DataRow("结算方式")
            dr("工程款收款") = e.DataRow("收入收款")
            dr("项目借款_借入") = e.DataRow("收入收款")
            dr("录入日期") = e.DataRow("录入日期")
            dr("日期") = e.DataRow("单据日期")
            dr("录入人") = e.DataRow("录入人")
            dr("摘要") = "甲方单位:" & e.DataRow("甲方名称")
            DataTables("项目资金管理").DataCols("记录编号").RaiseDataColChanged(dr)
            DataTables("项目资金管理").Save()
        End If
End Select

If e.DataCol.Name = "主合同编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("项目编号") = Nothing
        e.DataRow("工程名称") = Nothing
        e.DataRow("所属部门_区域公司") = Nothing
        e.DataRow("所属部门_分公司") = Nothing
        e.DataRow("所属部门_项目部") = Nothing
        e.DataRow("甲方名称") = Nothing
        e.DataRow("财务编号") = Nothing
        e.DataRow("实际造价") = Nothing
        e.DataRow("开工日期") = Nothing
        e.DataRow("竣工日期") = Nothing
        e.DataRow("循环编号") = Nothing
        e.DataRow("合同信息") = Nothing
        e.DataRow("已收款") = Nothing
        e.DataRow("开票总数") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("工程合同基础数据").SQLFind("[合同编号] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("项目编号") = dr("项目编号")
            e.DataRow("工程名称") = dr("工程名称")
            e.DataRow("所属部门_区域公司") = dr("所属部门_区域公司")
            e.DataRow("所属部门_分公司") = dr("所属部门_分公司")
            e.DataRow("所属部门_项目部") = dr("所属部门_项目部")
            e.DataRow("甲方名称") = dr("甲方名称")
            e.DataRow("财务编号") = dr("财务编号")
            e.DataRow("实际造价") = dr("实际造价")
            e.DataRow("开工日期") = dr("开工日期")
            e.DataRow("竣工日期") = dr("竣工日期")
            e.DataRow("循环编号") = dr("循环编号")
            e.DataRow("合同信息") = dr("合同编号") & dr("工程名称")
            e.DataRow("已收款") = dr("应收款收入数")
            e.DataRow("开票总数") = dr("开票总数")
            e.DataRow("应收款余额") = e.DataRow("开票总数") - e.DataRow("已收款")
        End If
    End If
End If

--  作者:沪上游客
--  发布时间:2019/5/29 13:34:00
--  
If e.DataCol.Name = "收入收款" Then
    For Each dr As DataRow In DataTables("应收款收入数据").datarows
        Dim slsk As Decimal
        slsk = DataTables("应收款收入数据").Compute("Sum(收入收款)","循环编号 = \'" & dr("循环编号") & "\'")
        DataTables("工程合同基础数据").SQLReplaceFor("应收款收入数",slsk,"循环编号 = \'" & dr("循环编号") & "\'")
        DataTables("工程合同基础数据").SQLReplaceFor("应收款余额","IsNull([开票总数],0) - IsNull([应收款收入数],0)","循环编号 = \'" & dr("循环编号") & "\'",True)
        DataTables("工程合同基础数据").SQLReplaceFor("项目资金当前余额","IsNull([应收款收入数],0) + IsNull([项目资金借入数],0) - IsNull([建安发票开票数],0) - IsNull([项目资金还款数],0) - IsNull([支出合同应付款_已付数],0) - IsNull([工资支付数],0) - IsNull([其他成本支出数],0) - IsNull([税费报销支出],0) - IsNull([总部申报数],0) - IsNull([印花税_支出合同],0) - IsNull([印花税_固定资产],0) - IsNull([管理费汇总_合计],0) - IsNull([企业所得税_总部预交],0)","循环编号 = \'" & dr("循环编号") & "\'",True)
        dr("已收款") = slsk
        dr("应收款余额") = dr("开票总数") - dr("已收款")
        dr("工程款_实际转入金额") = dr("收入收款")
        dr.Save()
    Next
End If


--  作者:沪上游客
--  发布时间:2019/5/29 13:35:00
--  
Dim zhtbh As String = Tables("应收款收入数据").Current("主合同编号")
If e.DataCol.Name = "主合同编号" Then
    If e.NewValue IsNot Nothing Then
        For Each dr As DataRow In DataTables("应收款收入数据").datarows
            Dim slsk As Decimal
            Dim slsk1 As Decimal
            \'先计算已更改主合同编号的记录值并更新工程合同基础数据
            slsk = DataTables("应收款收入数据").Compute("Sum(收入收款)","主合同编号 = \'" & dr("主合同编号") & "\'")
            DataTables("工程合同基础数据").SQLReplaceFor("应收款收入数",slsk,"合同编号 = \'" & dr("主合同编号") & "\'")
            DataTables("工程合同基础数据").SQLReplaceFor("应收款余额","IsNull([开票总数],0) - IsNull([应收款收入数],0)","合同编号 = \'" & dr("主合同编号") & "\'",True)
            DataTables("工程合同基础数据").SQLReplaceFor("项目资金当前余额","IsNull([应收款收入数],0) + IsNull([项目资金借入数],0) - IsNull([建安发票开票数],0) - IsNull([项目资金还款数],0) - IsNull([支出合同应付款_已付数],0) - IsNull([工资支付数],0) - IsNull([其他成本支出数],0) - IsNull([税费报销支出],0) - IsNull([总部申报数],0) - IsNull([印花税_支出合同],0) - IsNull([印花税_固定资产],0) - IsNull([管理费汇总_合计],0) - IsNull([企业所得税_总部预交],0)","合同编号 = \'" & dr("主合同编号") & "\'",True)
            dr("已收款") = slsk
            dr("应收款余额") = dr("开票总数") - dr("已收款")
            dr.Save()
            \'再计算原主合同编号的记录值并更新工程合同基础数据
            slsk1 = DataTables("应收款收入数据").SQLCompute("Sum(收入收款)","主合同编号 = \'" & zhtbh & "\'")
            DataTables("工程合同基础数据").SQLReplaceFor("应收款收入数",slsk1,"合同编号 = \'" & zhtbh & "\'")
            DataTables("工程合同基础数据").SQLReplaceFor("应收款余额","IsNull([开票总数],0) - IsNull([应收款收入数],0)","合同编号 = \'" & zhtbh & "\'",True)
            DataTables("工程合同基础数据").SQLReplaceFor("项目资金当前余额","IsNull([应收款收入数],0) + IsNull([项目资金借入数],0) - IsNull([建安发票开票数],0) - IsNull([项目资金还款数],0) - IsNull([支出合同应付款_已付数],0) - IsNull([工资支付数],0) - IsNull([其他成本支出数],0) - IsNull([税费报销支出],0) - IsNull([总部申报数],0) - IsNull([印花税_支出合同],0) - IsNull([印花税_固定资产],0) - IsNull([管理费汇总_合计],0) - IsNull([企业所得税_总部预交],0)","合同编号 = \'" & zhtbh & "\'",True)
            DataTables("应收款收入数据").SQLReplaceFor("已收款",slsk1,"主合同编号 = \'" & zhtbh & "\'")
            DataTables("应收款收入数据").SQLReplaceFor("应收款余额","IsNull([开票总数],0) - IsNull([已收款],0)","主合同编号 = \'" & zhtbh & "\'",True)
        Next
    End If
End If

--  作者:沪上游客
--  发布时间:2019/5/29 13:36:00
--  
If e.DataCol.Name = "进度" Then
    If Tables("应收款收入数据").Rows.Count > 0 Then
        Dim drs As DataRow
        drs = DataTables("我的工作台").Find("[记录编号] = \'" & e.DataRow("记录编号") & "\'")
        If drs Is Nothing
            If User.Group = "总公司" Then
                For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\' And 所属表名 = \'应收款收入数据\'")
                    For Each cdr As DataRow In DataTables("应收款收入数据").sqlselect("进度 =\'" & sz("进度") & "\'")
                        Dim nma() As String = {"进度","主合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'"应收款收入数据"表数据来源列
                        Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
                        Dim dr As DataRow = DataTables("我的工作台").AddNew
                        For i As Integer = 0 To nma.Length - 1
                            dr(nmb(i)) = cdr(nma(i))
                            dr("所属表名") = "应收款收入数据"
                            dr("窗口名") = "待办应收款申请"
                            If dr("进度") = "YSK1A" Then
                                dr("事项") = "应收款录入" & "(应收款金额:" & cdr("收入收款") & "元)"
                            ElseIf dr("进度") = "YSK1B" Then
                                dr("事项") = "应收款待审批" & "(应收款金额:" & cdr("收入收款") & "元)"
                            End If
                        Next
                    Next
                Next
            ElseIf User.Group Like "*区域" Then
                For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\' And 所属表名 = \'应收款收入数据\'")
                    For Each cdr As DataRow In DataTables("应收款收入数据").sqlselect("进度 =\'" & sz("进度") & "\'And 所属部门_区域公司 = \'" & User.Group & "\'")
                        Dim nma() As String = {"进度","主合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'"应收款收入数据"表数据来源列
                        Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
                        Dim dr As DataRow = DataTables("我的工作台").AddNew
                        For i As Integer = 0 To nma.Length - 1
                            dr(nmb(i)) = cdr(nma(i))
                            dr("所属表名") = "应收款收入数据"
                            dr("窗口名") = "待办应收款申请"
                            If dr("进度") = "YSK1A" Then
                                dr("事项") = "应收款录入" & "(应收款金额:" & cdr("收入收款") & "元)"
                            ElseIf dr("进度") = "YSK1B" Then
                                dr("事项") = "应收款待审批" & "(应收款金额:" & cdr("收入收款") & "元)"
                            End If
                        Next
                    Next
                Next
            ElseIf User.Group Like "*分公司" Then
                For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\' And 所属表名 = \'应收款收入数据\'")
                    For Each cdr As DataRow In DataTables("应收款收入数据").sqlselect("进度 =\'" & sz("进度") & "\'And 所属部门_分公司 = \'" & User.Group & "\'")
                        Dim nma() As String = {"进度","主合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'"应收款收入数据"表数据来源列
                        Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
                        Dim dr As DataRow = DataTables("我的工作台").AddNew
                        For i As Integer = 0 To nma.Length - 1
                            dr(nmb(i)) = cdr(nma(i))
                            dr("所属表名") = "应收款收入数据"
                            dr("窗口名") = "待办应收款申请"
                            If dr("进度") = "YSK1A" Then
                                dr("事项") = "应收款录入" & "(应收款金额:" & cdr("收入收款") & "元)"
                            ElseIf dr("进度") = "YSK1B" Then
                                dr("事项") = "应收款待审批" & "(应收款金额:" & cdr("收入收款") & "元)"
                            End If
                        Next
                    Next
                Next
            End If
        End If
    End If
End If

--  作者:沪上游客
--  发布时间:2019/5/29 13:46:00
--  
老师其他表也有同样的错误提示。有一条或以上就正常。
--  作者:有点甜
--  发布时间:2019/5/29 14:36:00
--  

加入msgbox定位出错位置

 

http://www.foxtable.com/webhelp/scr/1485.htm

 


--  作者:沪上游客
--  发布时间:2019/5/29 15:10:00
--  
---------------------------
错误
---------------------------
编译错误:“e”是“Private”,因此它在此上下文中不可访问。



错误代码:If e.DataCol.Name = "主合同编号" Then
---------------------------
确定   
---------------------------