Foxtable(狐表)用户栏目专家坐堂 → 动态卸载表


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

主题:动态卸载表

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


加好友 发短信
等级:童狐 帖子:297 积分:2187 威望:0 精华:0 注册:2023/1/11 7:15:00
动态卸载表  发帖心情 Post By:2023/12/8 21:22:00 [只看该作者]

图片点击可在新窗口打开查看

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


加好友 发短信
等级:童狐 帖子:297 积分:2187 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110743 积分:563641 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110743 积分:563641 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:297 积分:2187 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2023/12/9 8:44:00 [只看该作者]

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

 回到顶部