以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  动态卸载表  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=189566)

--  作者:creastzh
--  发布时间:2023/12/8 21:22:00
--  动态卸载表
图片点击可在新窗口打开查看
--  作者:creastzh
--  发布时间:2023/12/8 21:36:00
--  
我想实现根据菜单需要动态卸载无关表, 所以编写了这个函数

\'CloseUnrelatedTable_And_OpenRelatedTable 关闭无关的表,打开与本项工作有关的表, 
\'基本表Start,Data,ResourceID,EMlist保持常开,其它表按需要加载
\'后面用其删除无关表单,同时打开相关表单,引用方式:
\'Functions.Execute("CloseUnrelatedTable_And_OpenRelatedTable","主文件名")


    \'MessageBox.Show(1)
    Dim dtn As String = Args(0)
    
    \'4个基本表不允许关闭
    Dim FilesU As String = "Start|Data|ResourceID|EMList|"
    Dim Fs2 As String
    Dim dr As DataRow = DataTables("Data").Find("菜单_名称 = \'" & dtn & "\'")
    If dr IsNot Nothing Then
        If dr.IsNull("菜单_开启的表格名") Then
            Return Nothing
        Else
            SystemReady = False
            MainTable = Tables("Data")
            For Each dt As DataTable In DataTables
                If Not FilesU.Contains(dt.Name) Then
                    If dt.HasChanges = True Then
                        dt.Save
                    End If
                    If Fs2 = "" Then
                        Fs2 = dt.Name
                    Else
                        Fs2 = Fs2 & "|" & dt.Name
                    End If
                    DataTables.Unload(dt.Name)  \'卸载无关表
                End If 
            Next
            
            Output.Show("需要关闭:" & Fs2)
            \'DataTables.Unload(Fs2)
            MessageBox.Show(1)
            
            Dim Multi As String = dr("菜单_开启的表格名")
            Output.show("需要打开:" & Multi)
            Dim Files As Array = Multi.Split("|")
            For i As Integer = 0 To Files.Length - 1
                Dim dtn1 As String = Files(i)
                If Not DataTables.Contains(dtn1) Then
                    DataTables.Load(dtn1)  \'加载表
                End If 
            Next 
            SystemReady = True
        End If
    End If  

但在实际点击菜单后程序并没有如我所愿 先卸载所有无关表, 然后加载需要的表, 而是不断跳出下面这个提示:
图片点击可在新窗口打开查看

甚至 "MessageBox.Show(1)"这个问题测试都没有到达.
[此贴子已经被作者于2023/12/8 21:37:21编辑过]

--  作者:有点蓝
--  发布时间:2023/12/9 8:06:00
--  
这个表有没有和其它表做关联?如果有关联必须同时卸载

试试
……
                        Fs2 = Fs2 & "|" & dt.Name
                    End If
if DataTables.Contains(dt.Name) then
			DataTables.Unload(dt.Name)  \'卸载无关表
end if
                End If 
            Next

--  作者:有点蓝
--  发布时间:2023/12/9 8:08:00
--  
个人的建议是没有必要卸载表,把数据清空即可,比如

……
                        Fs2 = Fs2 & "|" & dt.Name
                    End If
DataTables(dt.Name).loadfilter = "[_identify] is null"
DataTables(dt.Name).load
                End If 
            Next

--  作者:creastzh
--  发布时间:2023/12/9 8:44:00
--  
老师, 我今天在论坛搜索了关键词"卸载", 其中有一篇"关于动态加载与卸载的 - 专家坐堂 - Foxtable(狐表) - 新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!",  2015年的这个求助帖与我描述的问题类似, 那后面我就不纠结 先卸载再加载这个问题了,按您建议我直接进行数据清空处理. 谢谢!