Foxtable(狐表)用户栏目专家坐堂 → [求助] 批量更改列名,用这段代码为什么执行不了呢?


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

主题:[求助] 批量更改列名,用这段代码为什么执行不了呢?

美女呀,离线,留言给我吧!
龙潭春早
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
[求助] 批量更改列名,用这段代码为什么执行不了呢?  发帖心情 Post By:2020/2/2 16:31:00 [只看该作者]

批量更改列名,用这段代码为什么执行不了呢?


' 批量更改列名 —— 遍历了外部数据源中的所有表的所有列

 

For Each tl As Table In Tables

    For Each cl As Col In tl.cols

       

        If cl.Name.Contains("ABCDE") Then

 

            Dim str2, str3 As String

            str2 = cl.Name ’更改前的列名

            str3 = str2.Replace("ABCDE","CD") ’更改后的列名

           

            Dim Builder As New ADOXBuilder("nWnd")

            Builder.Open()

            With Builder.Tables(cl.Table.Name)

                .RenameColumn(str2,str3) ’更改列名

            End With

            Builder.Close()   

       

        End If

    Next

Next


执行后,报错的截图:


此主题相关图片如下:批量修改列名时出错?.jpg
按此在新窗口浏览图片


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


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/2 22:32:00 [只看该作者]

遍历的是所有的table表,这些表全部都是"nWnd"数据源的吗?注意,关联表,窗口表也会出现在Tables里。

改为遍历datatables

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/5 20:08:00 [只看该作者]

蓝老师:

1、上面 1楼 代码遍历的所有 table 表,全部都是 "nWnd" 数据源的;

   如果 Tables 包含关联表和窗口表,会有什么不好的结果吗?

2、遍历了 datatables ,还是出错,报错弹窗的内容和 1楼 的完全一样;

   还有什么好办法吗?

   遍历 datatables 的代码:

' 批量更改列名 -- 遍历了外部数据源中的所有表的所有列

 

For Each dt As DataTable In DataTables

    For Each dc As DataCol In dt.DataCols

 

        If dc.Name.Contains("ABCDE") Then

 

            Dim str2, str3 As String

            str2 = dc.Name '更改前的列名

            str3 = str2.Replace("ABCDE","CD") '更改后的列名

 

            Dim Builder As New ADOXBuilder("nWnd")

            Builder.Open()

            With Builder.Tables(dc.DataTable.Name)

                .RenameColumn(str2,str3) '更改列名

            End With

            Builder.Close()

 

        End If

    Next

Next



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


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/6 11:01:00 [只看该作者]

肯定有不是 "nWnd" 数据源的,或者是临时表、sqltable之类的

For Each dt As DataTable In DataTables

msgbox(dt.name

Next


 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/6 19:38:00 [只看该作者]

蓝老师:

1)没有非 "nWnd" 数据源的表 —— 打开 Redirect 窗口查看,都是"nWnd" 数据源的表;

2)没有临时表 —— 用以下代码检测了,只有 外部数据表str3s 显示了数据,其它4个都是空值

Output.Show("按照类型,分别显示表的名称字符串:")
Output.Show("")

Dim str1s,str2s,str3s,str4s,str5s As String

For Each dt As DataTable In DataTables
    Select Case dt.Type
        Case 1
            str1s = str1s & dt.Name & "," ' 1 内部数据表
        Case 2
            str2s = str2s & dt.Name & "," ' 2 内部查询表
        Case 3
            str3s = str3s & dt.Name & "," ' 3 外部数据表
        Case 4
            str4s = str4s & dt.Name & "," ' 4 外部查询表
        Case 5
            str5s = str5s & dt.Name & "," ' 5 临时表
    End Select
Next

Output.Show("内部 数据 表 str1s = " & str1s)
Output.Show("")
Output.Show("内部 查询 表 str2s = " & str2s)
Output.Show("")
Output.Show("外部 数据 表 str3s = " & str3s)
Output.Show("")
Output.Show("外部 查询 表 str4s = " & str4s)
Output.Show("")
Output.Show("临时      表 str5s = " & str5s)
Output.Show("")


3)最后,已经设计了不少的窗口(比较多),表 sqltable 要怎么查呢?

   印象中,我们没有使用过 sqltable 类型的表,用的都是 Normal 的副本。


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


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 11:31:00 [只看该作者]

做个例子发上来测试,或者下周上班后联系客服远程看看吧

 回到顶部