以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  无法动态增加列?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=128860)

--  作者:wmh
--  发布时间:2018/12/17 0:47:00
--  无法动态增加列?
老师,我想制作一个自定义函数动态增加列。我先将一个表的列全部删除,然后增加列,代码如下
Dim tblname As String=args(0)
Dim colname As String=args(1)
Dim Col_Length As Integer=args(2)
DataTables.Unload(tblname ) \'卸载表C
DataTables.load(tblname)
Dim Builder As New ADOXBuilder
Builder.Open() \'打开ADOXBuilder
    With Builder.Tables(tblname)
        .AddColumn(colname ,ADOXType.String, Col_Length ) \'增加字符型列,长度指定为250
    End With
Builder.Close() \'关闭ADOXBuilder
DataTables.Unload(tblname ) \'卸载表C
DataTables.load(tblname)

代码运行后,没有增加列。错在哪里了呢?
烦请老师指点。
谢谢!




--  作者:有点甜
--  发布时间:2018/12/17 9:01:00
--  

我这样测试没问题

 

Dim tblname As String="表A"
Dim colname As String="abcde"
Dim Col_Length As Integer=32
DataTables.Unload(tblname ) \'卸载表C
DataTables.load(tblname)
Dim Builder As New ADOXBuilder
Builder.Open() \'打开ADOXBuilder
With Builder.Tables(tblname)
    .AddColumn(colname ,ADOXType.String, Col_Length ) \'增加字符型列,长度指定为250
End With
Builder.Close() \'关闭ADOXBuilder
DataTables.Unload(tblname ) \'卸载表C
DataTables.load(tblname)


--  作者:wmh
--  发布时间:2018/12/17 10:20:00
--  
老师,我将表A的所有列删除后执行的上述代码。是不是不能删除所列?
--  作者:有点甜
--  发布时间:2018/12/17 10:35:00
--  
以下是引用wmh在2018/12/17 10:20:00的发言:
老师,我将表A的所有列删除后执行的上述代码。是不是不能删除所列?

 

贴出你写的完整代码。


--  作者:wmh
--  发布时间:2018/12/17 12:58:00
--  
老师,我用datacols 的add 方法添加临时列,还是不行。代码是在双击treeview1后运行,代码如下:
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode=trv.selectedNode
Dim str As String
Dim j As Integer
str=nd.Level
If str<>"1" Then
    Return
End If \'===========当双击的是第一级的时候,才调Excel.
Dim pth As String="d:\\出图\\" & nd.ParentNode.name \' & nd.Name
Dim tbl As Table=Tables("excel")
\'messagebox.show(1)
Dim dr As DataRow \' ======找出字符串,根据Excel的列名称,改变表的列名称.
dr=DataTables("文档注册表").Find("[文档名称] = \'" & nd.ParentNode.name & "\' And [sheet]=\'" & nd.name & "\'") \' ====找出列名称数组,狐表中的文档注册表中,每个标准的行的键值,是需要显示的列名称 数组
Dim i As Integer
i=Tables("文档注册表").findrow(dr)
Dim sp As String=Tables("文档注册表").Rows(i)("键值")
Dim sz() As String=sp.split("|")
Dim va=Functions.Execute("ExcelToArry",pth,nd.name)
Dim Endrow As Integer=ubound(va,1)
Dim Endcol As Integer=ubound(va,2)
messagebox.show("endrow=" & Endrow & "   endcol=" & Endcol )
Functions.Execute("Delete_Allcols","excel")
messagebox.show("tbl.Cols.count=  " & tbl.Cols.count)
If tbl.Rows.count<Endrow Then
    Syscmd.Row.AddNews(Endrow-tbl.Rows.count)
End If

With DataTables("excel")
    For j=1 To sz.length
        If va(1,sz(j-1)) <>"" Then
            .DataCols.Add( "列" & j ,Gettype(String),250,"",va(1,sz(j-1)))
            messagebox.show("列标题=" & .datacols("列" & j).caption & "   va(1,sz(j-1))=" & va(1,sz(j-1)))
            DataTables.Unload("excel")
            DataTables.load("excel")
            For i=2 To Endrow
                .dataRows(i-2)("列" & j).value=va(i,j)
            Next
        End If
    Next
End With
messagebox.show(2)
With Tables("标准管理_Table1")
    .MergeMode = MergeModeEnum.Standard \'标准合并模式
    .MergeCols.Clear() \'清除原来的合并列
    .MergeCols.Add(tbl.Cols(0).name) \'加入要合并的列
    .MergeCols.Add(tbl.Cols(1).name) \'加入要合并的列
    .MergeCols.Add(tbl.Cols(2).name) \'加入要合并的
    \'   .MergeSort = tbl.Cols(0).name  & "," &  tbl.Cols(1).name  & "," & tbl.Cols(2).name                \'设置合并模式下的排序方式
    .AllowMerge = True \'启用合并模式
End With
---------------------------------------------------------------------
我编写的自定义函数   Delete_Allcols 代码如下:
Dim tblname As String=args(0)
DataTables.Unload(tblname)
DataTables.load(tblname)
Dim j As Integer
Dim Builder As New ADOXBuilder
Builder.Open() \'打开ADOXBuilder
With Builder.Tables(tblname)
    For Each c As Col In Tables(tblname).Cols
        .DeleteColumn(c.name)
        j=j+1
    Next
End With
Builder.Close() \'关闭ADOXBuilder
DataTables.Unload(tblname)
DataTables.load(tblname)
Return j
\'=======删除所有列    tblname是表名称.


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:documents.zip





--  作者:有点甜
--  发布时间:2018/12/17 15:17:00
--  

1、是在删除列的时候报错,还是在增加列的时候报错?报什么错?

 

请先定位出错位置 http://www.foxtable.com/webhelp/scr/1485.htm

 

2、请做一个可以正常测试的实例发上来测试。