以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  NET Framework 的错误信息是什么意思?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=141840)

--  作者:gzlw2019
--  发布时间:2019/10/12 10:09:00
--  NET Framework 的错误信息是什么意思?
.NET Framework 版本:4.0.30319.1026
Foxtable 版本:2019.8.3.1
错误所在事件:窗口,季度评优,B制表,Click
详细错误信息:
Error HRESULT E_FAIL has been returned from a call to a COM component.


--  作者:有点蓝
--  发布时间:2019/10/12 10:26:00
--  
错误所在事件:窗口,季度评优,B制表,Click  -- 检查代码,提示是是无法调用com组件
--  作者:gzlw2019
--  发布时间:2019/10/12 10:52:00
--  代码如下:
Dim drs As List(Of DataRow)
Dim Result As DialogResult
Result = MessageBox.Show("将删除<季度评优>表的所有数据,是否继续?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    drs = dty.Select("[在职] = \'True\' And [职位等级] > 3","部门,职位等级")
    dtj.DeleteFor("")
    Dim i As Integer
    For Each dr As DataRow In drs
        dbj.AddNew()
        i = Array.Indexof(Y部门,dr("部门"))
        dbj.Current("分组") = S分组(i)
        dbj.Current("次序") = 次序(i)
        dbj.Current("姓名") = dr("姓名")
        dbj.Current("级别") = dr("职位等级")
    Next
    dtj.Save()
    i = 1
    If i = 1 Then
        Vars("kh") ="季度评优"
        Dim Builder As New ADOXBuilder
        Dim tbl As ADOXTable
        Builder.Open()
        If DataTables.Contains(Vars("kh")) \'如果存在表
            For Each dc As DataRow In DataTables(Vars("kh")).DataRows
                Dim Name As String = dc("姓名")
                If dbj.Cols.Contains(Name) Then
                    Builder.Tables(Vars("kh")).DeleteColumn(Name) \'删除含"姓名"的列
                End If
            Next
            DataTables(Vars("kh")).Save()

            For Each dc As DataRow In DataTables(Vars("kh")).Select("","次序,级别")
                Dim Name As String = dc("姓名")
                Builder.Tables(Vars("kh")).AddColumn(Name ,ADOXType.Integer)  \'添加(姓名)列
            Next
        End If
        Builder.Close()
        
        \'DataTables.load("季度评优")
        dbj.Sort = "次序,级别"
        
        dtj.ResumeRedraw()
        \'Forms("季度评优").ReseumeRedraw() \'停止绘制窗口
        Syscmd.Project.Open(ProjectFile)
    End If
    \'dtj.ResumeRedraw()
End If

##昨晚可以生成(姓名)列,后来不行??

--  作者:有点蓝
--  发布时间:2019/10/12 11:35:00
--  
应该是删除了不存在的列,或者是添加了已经存在的列。这种用法在并发的时候特别容易出错。

如果表格是通用的,建议添加固定列。如果表格不是通用的,用户独有的,表格名称加上用户名称进行区分,这个用户不能使用其它用户的表格

--  作者:gzlw2019
--  发布时间:2019/10/12 14:58:00
--  
我手工增加列不行,也是同样问题,只有复制表结构生成新表代码正常执行。
--  作者:有点蓝
--  发布时间:2019/10/12 15:02:00
--  
那应该是列太多了,数据库的列数量是有限制的。什么数据库?
--  作者:gzlw2019
--  发布时间:2019/10/12 15:15:00
--  
职工的季度评优表,有100列左右。
--  作者:有点蓝
--  发布时间:2019/10/12 15:24:00
--  
压缩一下项目。如果是access数据库使用access打开数据库压缩一下