以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  加载表出现错误  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=113814)

--  作者:shanshuizhujian
--  发布时间:2018/1/23 15:55:00
--  加载表出现错误
现状:模块A按钮;模块B按钮,这两个按钮同时在主窗口内。当点击A时,清除主窗口内的内嵌窗口,也就是控件,关闭A模块下的菜单、卸载模块A相关的所有表;当点击B时,清除主窗口内的内嵌窗口,也就是控件,关闭B模块下的菜单、卸载模块B相关的所有表。
测试情况:如果我在A模块下,点击一个菜单按钮,打开一个独立窗口C(这个窗口里表控件关联着表a1),嵌入到主窗口,当我这个时候点击B的时候,也会卸载属于模块A的所有表,代码运行到加载属于B模块的所有表的时候,会出错,提示“不存在表a1”。
如果我点击A后,点击的菜单打开的窗口是独立窗口,不是嵌入到主窗口的,这个时候,再点击B一切正常。
后来我在A按钮事件里,加入了关闭窗口C的代码后,问题也不再出现。
疑问:
1、帮助里说,卸载表的时候,要先关闭与要卸载的表关联的窗口,但是我这个代码出错却在加载表的时候出现的。
2、对于嵌入主窗口的独立窗口,在主窗口的面板里清除这个独立窗口的时候,这个窗口不自动关闭吗?如果不自动关闭,那错误应该在卸载表的时候出现才对,为什么却在加载表的时候出现呢?
3、还是其他原因呢?

--  作者:有点甜
--  发布时间:2018/1/23 15:58:00
--  
 做个实例发上来测试吧。无法理解你目前的问题。
--  作者:shanshuizhujian
--  发布时间:2018/1/23 16:07:00
--  
以下是引用有点甜在2018/1/23 15:58:00的发言:
 做个实例发上来测试吧。无法理解你目前的问题。
谢谢了,实例有点大,我加入了关闭所有窗口代码,这样不会出错了。估计是清除内嵌窗口不代表关闭窗口,估计和这个有关。


--  作者:有点甜
--  发布时间:2018/1/23 16:48:00
--  
以下是引用shanshuizhujian在2018/1/23 16:07:00的发言:
谢谢了,实例有点大,我加入了关闭所有窗口代码,这样不会出错了。估计是清除内嵌窗口不代表关闭窗口,估计和这个有关。

 

关键得看你如何清除内嵌窗口的。如果只是delete或者remove或者clear,窗口没关闭的。必须用forms("").close才行


--  作者:shanshuizhujian
--  发布时间:2018/1/25 13:49:00
--  回复:(有点甜)以下是引用shanshuizhujian在2018/1/...
\'\'打开系统设置相关页面的函数

If Forms("主窗口").Opened Then
    Dim p As WinForm.SplitPanel  = Forms("主窗口").Controls("SplitContainer2").Panel2
    Dim PB As Object = p.BaseControl
    Dim Name As String = "系统设置"
    Forms(Name).OPEN(-1000,-1500)
    Forms(Name).BaseForm.TopLevel = False
    Forms(Name).BaseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    Forms(Name).BaseForm.Dock = System.Windows.Forms.DockStyle.Fill
    PB.Controls.Clear
    PB.Controls.add(Forms(Name).BaseForm)
    Forms("系统设置").StopRedraw()
Else
    Forms("系统设置").open
    Forms("系统设置").StopRedraw()
End If

Dim tab As WinForm.TabControl = Forms("系统设置").Controls("TabControl1")
Forms("系统设置").Text = "系统设置" & "-" & "[" & args(0) & "]"
tab.ShowTabs = False
tab.SelectedPage = tab.TabPages(args(0))
Forms("系统设置").ResumeRedraw()

以上是把窗口内嵌到主窗口里,以下是从卸载当前模块,加载点击的模块。




[此贴子已经被作者于2018/1/25 13:55:59编辑过]

--  作者:shanshuizhujian
--  发布时间:2018/1/25 13:58:00
--  回复:(shanshuizhujian)回复:(有点甜)以下是引用...
\'加载本模块所需要的表

\'先关闭主窗口放置的窗口,不然在存在子窗口的时候,更换模块会出错.  
For Each frm As WinForm.Form In Forms
    If frm.name ="主窗口" Then
    Else
        forms(frm.name).close
    End If
Next

\'先卸载前期加载所有表
Dim name As String = "|"
For Each dt1 As DataTable In DataTables
    If dt1.name <> "itb_Main" Then
        name = name & dt1.name & "|"
    End If
Next
name = name.trim("|")
If name <> Nothing Then
    DataTables.Unload(name)
End If
\'\'加载本模块所需要的表
Dim dtm As DataTable
cmd.C
‘’‘’cmd.CommandText = "S E L E C T DISTINCT strTabName From {otb_SysTable} where strModelName =\'" & myname & "\'"
dtm = cmd.ExecuteReader()
Dim strtabname As String = dtm.GetComboListString("strTabName")

DataTables.Load(strtabname)  ‘如果加上面那段关闭窗口的代码,这句话就会出错’
[此贴子已经被作者于2018/1/25 13:59:16编辑过]

--  作者:有点甜
--  发布时间:2018/1/25 14:31:00
--  

1、msgbox(strtabname) 弹出什么?

 

2、执行代码,出错,提示什么?


--  作者:shanshuizhujian
--  发布时间:2018/1/25 15:25:00
--  回复:(有点甜)1、msgbox(strtabname) 弹出什么?...
会弹出表的名称,这些表名称是将要加载的表,下面的错误显示完毕会加载这些表,
图片点击可在新窗口打开查看此主题相关图片如下:3(lsr8.png
图片点击可在新窗口打开查看
出错的是和窗体有关的表不存在。
图片点击可在新窗口打开查看此主题相关图片如下:6qs911zxqzqox9rhf9s4jge.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/1/25 15:36:17编辑过]

--  作者:有点甜
--  发布时间:2018/1/25 15:49:00
--  

1、如果提示【不存在xxxDatatable】,说明你哪里写有代码或者设置,引用了此表,但是此表又没有加载出来。

 

2、做个相识的例子发上来测试吧。不清楚你是怎么处理调用的。


--  作者:shanshuizhujian
--  发布时间:2018/1/25 15:55:00
--  回复:(有点甜)1、如果提示【不存在xxxDatatable】,...
是的,就是嵌入那个主窗口的窗口引用了这几个表,在更换的时候,没有关闭。但是为什么不再卸载的时候出现,而在加载的时候出现呢?