以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 批量更改列名,用这段代码为什么执行不了呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145621)

--  作者:龙潭春早
--  发布时间: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
按此在新窗口浏览图片


--  作者:有点蓝
--  发布时间:2020/2/2 22:32:00
--  
遍历的是所有的table表,这些表全部都是"nWnd"数据源的吗?注意,关联表,窗口表也会出现在Tables里。

改为遍历datatables

--  作者:龙潭春早
--  发布时间: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



--  作者:有点蓝
--  发布时间:2020/2/6 11:01:00
--  

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

For Each dt As DataTable In DataTables

msgbox(dt.name

Next


--  作者:龙潭春早
--  发布时间: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 的副本。


--  作者:有点蓝
--  发布时间:2020/2/7 11:31:00
--  
做个例子发上来测试,或者下周上班后联系客服远程看看吧