Foxtable(狐表)用户栏目专家坐堂 → [求助]外部数据源动态修改表结构


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

主题:[求助]外部数据源动态修改表结构

帅哥哟,离线,有人找我吗?
薛翁
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:80 积分:836 威望:0 精华:0 注册:2015/8/29 18:22:00
[求助]外部数据源动态修改表结构  发帖心情 Post By: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!")

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


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/20 8:54:00 [只看该作者]

一般是创建了同名的列,就是这个名称的列已经存在。如果软件是多个人使用的肯定会出现这种情况。

如果数据不需要长期存储的,建议使用临时表:http://www.foxtable.com/webhelp/topics/0679.htm

频繁的删除新建数据库表列这种用法本身就不是很合理,一般人也不建议使用这种方法

 回到顶部