以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态修改表结构,求助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140488)

--  作者:yifan3429
--  发布时间:2019/9/6 16:23:00
--  动态修改表结构,求助
数据源是外部数据源

我希望遍寻所有的表
找到第一列
如果有
.RenameColumn("第一列","姓名")
如果没有就新建
.AddColumn("姓名" ,ADOXType.Text) \'增加备注列
求助老师


Dim Builder As New ADOXBuilder("nwnd") \'要指定数据源名称
Dim
tbl As ADOXTable
Builder.Open()
With
Builder.Tables("A")
    .
RenameColumn("第一列","姓名")
End With

Builder
.Close()
--  作者:有点蓝
--  发布时间:2019/9/6 16:34:00
--  
获取数据源中所有的表名参考:http://www.foxtable.com/webhelp/topics/1943.htm

通过表名使用SQLCommand返回表结构:select * from xxx表 where false
根据返回的datatable,判断是否有"第一列"


--  作者:yifan3429
--  发布时间:2019/9/6 18:04:00
--  
看了还是不会组织代码,求助老师
--  作者:有点蓝
--  发布时间:2019/9/6 20:16:00
--  

Dim cmd As New SQLCommand
Dim
 dt As DataTable
cmd.ConnectionName = 
"region"

For Each nm As String In Connections("region").GetTableNames

cmd.CommandText = 
"SELECT * From " & nm & " where false"
dt = cmd.ExecuteReader()

if dt.datacols.contains("第一列") then

msgbox("包含第一列")

end if
Next



--  作者:yifan3429
--  发布时间:2019/9/15 7:29:00
--  

DataRowAdding 新增行时


\'寻找系统必备列 如果没有那就增加


Dim cmd As New SQLCommand

Dim dt As DataTable

cmd.C

For Each nm As String In Connections("erp2019").GetTableNames

    cmd.CommandText = "SEL ECT * F rom " & nm & " where false"

    dt = cmd.ExecuteReader()

    If dt.datacols.contains("Log") Then

    Else

       dt.datacols.AddColumn("Log" ,ADOXType.String, 50) \'增加字符型列,长度指定为12

    End If

Next


---------------------------

错误

---------------------------

编译错误:“AddColumn”不是“DataColCollection”的成员。




错误代码:dt.datacols.AddColumn("Log" ,ADOXType.String, 50) \'增加字符型列,长度指定为12

---------------------------

确定   

---------------------------



--  作者:有点蓝
--  发布时间:2019/9/15 8:46:00
--  
datatable.datacols没有AddColumn这种用法:http://www.foxtable.com/webhelp/topics/1428.htm

使用datatable.datacols只能添加临时列,这种用法没有必要判断数据库,因为临时列是不可能在数据库里有的。

如果要添加永久列,参考:http://www.foxtable.com/webhelp/topics/2122.htm
另外使用ADOXBuilder添加的列,注意是没有办法在主表里看到的,需要在外部表管理中重新添加表。