以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助:项目关闭前删除不需要的表,总出错!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79802)

--  作者:lmlptj
--  发布时间:2016/1/9 12:57:00
--  求助:项目关闭前删除不需要的表,总出错!

BeforeCloseProject    关闭项目之前执行 事件代码:

‘想要实现的目的:关闭项目前,如果不是表A,表B,表C,表D,则全部删除!!

代码如下:


If DataTables.Count > 4 Then
    Dim Builder As New ADOXBuilder
    Builder.Open()
    With Builder
        Dim tbs As String = "表A,表B,表C,表D"
        For Each t As Table In Tables
            Dim name = t.Name
            If tbs.Contains(name) = False Then
                .DeleteTable(name)
            End If
        Next
    End With
    Builder.Close()
End If

但会经常性地出现以下错误信息!!

图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看


--  作者:lmlptj
--  发布时间:2016/1/9 13:09:00
--  
请老师帮个忙!
--  作者:Hyphen
--  发布时间:2016/1/9 14:16:00
--  
其它表是通过什么方式生成的?

如果是动态生成的临时表,不用删除,关闭项目就自动没有了

--  作者:lmlptj
--  发布时间:2016/1/9 15:10:00
--  
不是临时生成的表!而是程序运行过程中随机添加的正常表。
--  作者:Hyphen
--  发布时间:2016/1/9 15:15:00
--  
通过什么方式生成的?代码说明一下!

 程序运行过程中随机添加的一般都是临时表

--  作者:lmlptj
--  发布时间:2016/1/9 15:58:00
--  
是从Accesc文件中加导入进来的。主要是对历史数据的查询或核对,项目关闭后这些表就不再需要了。
[此贴子已经被作者于2016/1/9 15:59:25编辑过]

--  作者:Hyphen
--  发布时间:2016/1/9 16:39:00
--  
改成Datatable,Tables包含了关联表
 For Each t As DataTable In DataTables
       Dim name = t.Name
       If tbs.Contains(name) = False Then
              .DeleteTable(name)
       End If 
  Next

有外部表,加上 t.Type判断一下
 If tbs.Contains(name) = False AndAlso t.Type = 1 Then

--  作者:lmlptj
--  发布时间:2016/1/9 19:21:00
--  
错误依旧呢!图片点击可在新窗口打开查看
--  作者:lmlptj
--  发布时间:2016/1/9 19:30:00
--  
将查询历史记录的表名用全局变量引用表名,然后在项目关闭前事件中直接删除查询的表名即解决了这个问题。谢谢你热心的解答和指导。
--  作者:大红袍
--  发布时间:2016/1/10 12:13:00
--  
Dim dts As new List(Of String)
Dim tbs As String = "表A,表B"
For Each dt As DataTable In DataTables
    If tbs.Contains(dt.name) = False Then
        dts.add(dt.name)
    End If
Next
Dim Builder As New ADOXBuilder
Builder.Open()
With Builder
    For Each n As String In dts
        .DeleteTable(n)
    Next
End With
Builder.Close()