Foxtable(狐表)用户栏目专家坐堂 → 无法动态增加列?


  共有1553人关注过本帖树形打印复制链接

主题:无法动态增加列?

帅哥哟,离线,有人找我吗?
wmh
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:46 积分:515 威望:0 精华:0 注册:2015/8/24 20:19:00
无法动态增加列?  发帖心情 Post By: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)

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




 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:46 积分:515 威望:0 精华:0 注册:2015/8/24 20:19:00
  发帖心情 Post By:2018/12/17 10:20:00 [只看该作者]

老师,我将表A的所有列删除后执行的上述代码。是不是不能删除所列?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/17 10:35:00 [只看该作者]

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

 

贴出你写的完整代码。


 回到顶部
帅哥哟,离线,有人找我吗?
wmh
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:46 积分:515 威望:0 精华:0 注册:2015/8/24 20:19:00
  发帖心情 Post By: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





 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/17 15:17:00 [只看该作者]

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

 

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

 

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


 回到顶部