以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]动态修改表结构问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=154170)

--  作者:薛翁
--  发布时间:2020/9/6 22:24: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 2:31:19编辑过]

--  作者:有点蓝
--  发布时间:2020/9/6 22:29:00
--  
1、所有开发功能在编译后都无法使用
2、如果是外部表,可以使用sql更改:https://www.baidu.com/baidu?word=SQL+更改列,内部表没有办法
建议在开发阶段就设置足够大的列长度