以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]外部数据源动态修改表结构 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=162990) |
-- 作者:薛翁 -- 发布时间:2021/4/20 2:45:00 -- [求助]外部数据源动态修改表结构 我在做工资程序时碰到一个头疼的问题 恳请赐教!谢谢! 在工资系统中用户自定义了“工资结构”表 有列名、类型和宽度(如:姓名,C,4) 外表数据源的"当前工资表"中除第一个列外,其他列均删除 执行下面的程序后达到预期效果。 Dim Names As New List(Of String) For Each cn As Col In Tables("当前工资表").Cols names.Add(cn.name) Next Dim Builder As New ADOXBuilder("CAIWU") Builder.Open() \'打开ADOXBuilder With Builder.Tables("当前工资表") For i As Integer = 1 To Names.Count -1 .DeleteColumn(names(i)) Next End With Builder.Close() 下面这段增加列的程序无法运行,提示错误: 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 (我按帮助所示,创建外部数据源的表没有问题,是增加列的问题) 请老师看一下这段程序有什么错误。 Dim jg As Table = Tables("工资结构") Dim Builder As New ADOXBuilder("CAIWU") \'要指定数据源名称 Builder.Open() With Builder.Tables("当前工资表") For Each r As Row In jg.Rows Dim zdm As String = r("列名") Dim lx As String = r("类型") Dim kd As Integer = r("宽度") If lx = "C" Then .AddColumn( zdm ,ADOXType.String, kd ) ElseIf lx = "N" Then .AddColumn( zdm ,ADOXType.Double ) End If Next End With Builder.Close() MessageBox.Show("OK!") |
-- 作者:有点蓝 -- 发布时间:2021/4/20 8:54:00 -- 一般是创建了同名的列,就是这个名称的列已经存在。如果软件是多个人使用的肯定会出现这种情况。 如果数据不需要长期存储的,建议使用临时表:http://www.foxtable.com/webhelp/topics/0679.htm 频繁的删除新建数据库表列这种用法本身就不是很合理,一般人也不建议使用这种方法
|