以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态删除列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=81269)

--  作者:kaituozhe
--  发布时间:2016/2/23 12:45:00
--  动态删除列

Dim Builder As New ADOXBuilder
Builder.Open() \'打开ADOXBuilder
With Builder.Tables("表A")
    For Each c As DataCol In DataTables("科目余额表").DataCols
        If c.name <> "会计科目" AndAlso c.name <> "会计年度"  Then
            .DeleteColumn("& c &")
        End If
    Next
End With
Builder.Close()

以上代码那里错误,提示如下

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:窗口,窗口1,Button2,Click
详细错误信息:
在对应所需名称或序数的集合中,未找到项目。


--  作者:kaituozhe
--  发布时间:2016/2/23 12:49:00
--  
找到原因了
--  作者:kaituozhe
--  发布时间:2016/2/23 13:19:00
--  

Select Case e.DataCol.name
    Case "会计年度"
        If e.newvalue IsNot Nothing Then
            For Each mn As DataCol In e.DataTable.DataCols
                If mn.name <> "会计年度"  Then
                    Dim filter As String ="会计年度 = \'" & e.DataRow("会计年度") & "\'"
                    e.DataRow(mn.name) =DataTables("账项调整借方").Compute("sum(mn.name)",filter)+DataTables("重分类调整借方").Compute("sum(mn.name)",filter)
                End If
            Next
            \'ElseIf e.newvalue = Nothing Then
            \'For Each mn As String In mns
            \'e.DataRow(mn) = Nothing
            \'Next
        End If
End Select

 

红色代码错误在那里 提示如下

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:表,已审借方发生,DataColChanged
详细错误信息:
调用的目标发生了异常。
聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数。


--  作者:大红袍
--  发布时间:2016/2/23 13:39:00
--  

很基础的问题啊

 

e.DataRow(mn.name) =DataTables("账项调整借方").Compute("sum(" & mn.name & ")",filter)+DataTables("重分类调整借方").Compute("sum(" & mn.name & ")",filter)

[此贴子已经被作者于2016/2/23 13:39:35编辑过]

--  作者:kaituozhe
--  发布时间:2016/2/23 14:21:00
--  

我试过了,4楼的错误提示如下:

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:表,已审借方发生,DataColChanged
详细错误信息:
调用的目标发生了异常。
无效的聚合函数 Sum()和类型 String 的用法。


--  作者:大红袍
--  发布时间:2016/2/23 14:42:00
--  
 说明你对应的列不是 数值类型,而是字符类型,把列的类型改一下。
--  作者:kaituozhe
--  发布时间:2016/2/23 14:54:00
--  
全是数值型的
--  作者:大红袍
--  发布时间:2016/2/23 15:01:00
--  
 不,可,能。上传实例。
--  作者:kaituozhe
--  发布时间:2016/3/2 20:37:00
--  

Dim bbmcs() As String = {"余额横表已审","余额横表未审","发生横表已审借方","发生横表已审贷方","发生横表未审借方","发生横表未审贷方","账项调整借方","账项调整贷方","重分类调整借方","重分类调整贷方"}
For Each bbmc As String In bbmcs
    Dim Builder As New ADOXBuilder
    Builder.Open() \'打开ADOXBuilder
    Dim Products As List(Of String)
    Products = DataTables("会计科目").GetValues("科目名称", "科目名称 is not null","_Sortkey")
    For Each c As DataCol In DataTables(bbmc).DataCols
msgbox(c.name)
        If c.name <> "会计年度" AndAlso c.name <> "审核" Then
\'msgbox(6)
            If Products.Contains(c.name) = False Then
msgbox(7)
msgbox(c.name)
msgbox(Products.Contains(c.name) = False)
msgbox(c.name)
                Builder.Tables(bbmc).DeleteColumn(" & c.name & ")
msgbox(8)
            End If
        End If
    Next
    Builder.Close() \'关闭ADOXBuilder
Next

橙色行的代码错在那里了,提示如下:

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:窗口,建立项目,余额表横表删除多余列,Click
详细错误信息:
在对应所需名称或序数的集合中,未找到项目。


--  作者:kaituozhe
--  发布时间:2016/3/2 20:39:00
--  
 Builder.Tables(bbmc).DeleteColumn(c.name) 与 Builder.Tables(bbmc).DeleteColumn("c.name")也都不行