以文本方式查看主题 - 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 执行后,报错的截图: |
-- 作者:有点蓝 -- 发布时间: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个都是空值
3)最后,已经设计了不少的窗口(比较多),表 sqltable 要怎么查呢? 印象中,我们没有使用过 sqltable 类型的表,用的都是 Normal 的副本。 |
-- 作者:有点蓝 -- 发布时间:2020/2/7 11:31:00 -- 做个例子发上来测试,或者下周上班后联系客服远程看看吧 |