以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]加载未加载表的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=140987)

--  作者:keli0917
--  发布时间:2019/9/18 21:50:00
--  [求助]加载未加载表的问题

1,定义两个public变量集合ALLTABLES,INTABLES,

2,在beforeLoadOuterTable那里,加入代码

 

ALLTABLES.add(e.datatablename)

\'记录所有表

 

Select Case e.DataTableName
    Case  "首页","用户信息","公司信息" \'表A和表B无条件加载
        Intables.add(e.datatablename)

      \'记录已经加载的表


    Case Else \'其他所有表默认都不加载
        e.Cancel = True
    End  Select

3,新建一个函数MYLOAD,代码如下

 

For Each inTable As String In inTables
    alltables.remove(Intable)
Next
Dim sql,str As String
For Each Name As String In alltables
    \'MessageBox.show(name)
    sql+ = "|" & name

Next
sql = sql.Substring(1) 
str = """" & sql & """"
\'MessageBox.show(str)
\'If DataTables.Contains("第一个表的名称") = False Then
DataTables.Load(str)
\'End If

 

4,在afteropenproject在最后一行写以下代码或者在第一个打开的窗口里AFTERLOAD里写以下代码

 

Functions.AsyncExecute("MYLOAD")

 

都无法加载未加载的表,请问一下是哪里错了。。。。要怎么修改。谢谢。

 


--  作者:keli0917
--  发布时间:2019/9/19 8:30:00
--  
求助。。。
--  作者:有点蓝
--  发布时间:2019/9/19 8:42:00
--  
先看看:http://www.foxtable.com/mobilehelp/topics/277.htm

datatable不能在异步函数中使用,也就是无法异步加载。既然无法异步加载,那么这种用法比默认全部加载更慢更麻烦

--  作者:keli0917
--  发布时间:2019/9/19 16:24:00
--  

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=123060&skin=0

我是看了上面那个链接上有点红老师说的才想这样用。他说,你可以写一个异步函数,偷偷慢慢的加载全部表进来

 

我1楼的代码,把Functions.AsyncExecute("MYLOAD")改成Functions.Execute("MYLOAD")也无法加载。


--  作者:keli0917
--  发布时间:2019/9/19 16:26:00
--  
而且我把函数里的代码直接放在afteropenproject最后一行也没用。。。用MessageBox.show(str)查看表名又都是正确的。

--  作者:keli0917
--  发布时间:2019/9/19 16:33:00
--  

主要是表太多了,加载真的很慢,一个个分开写加载表又太麻烦,所以就想异步偷偷的慢慢加载。这样又省事,又不至于影响使用。

凡是在主线程中创建的对象,例如Table、Datatable,窗口及窗口控件,菜单及菜单组件,都不应该在异步函数中调用。

我们可以在异步函数中生成临时的DataTable使用。

不能在异步函数中读写Var变量,不能读写设置等。 Public变量可以在异步函数中使用,但最好不要跨线程更新数据,否则很容易得到错误的结果。

如果异步函数要使用上述任何对象或数据,请另外定义一个函数来完成之,然后在异步函数中用同步方式调用此函数有关异步函数如何调用同步函数并传递参数,我们在上一节已经介绍了。


--  作者:有点蓝
--  发布时间:2019/9/19 16:51:00
--  
只是datatable不支持异步加载。如果表和数据多,那就先不加载。用到的时候再加载,比如动态加载,分页加载,按需加载。
--  作者:keli0917
--  发布时间:2019/9/22 8:55:00
--  

遇到一个动态加载表新问题,请教:

父表A和子表B建立了关联。

父表C和子表B建立关联。

两个关联的关联列是不同的列。

ABC三个表会在同一个窗口出现。

1.应该怎么动态加载表A.B.C?

 

If DataTables.Contains("A") = False Then
            DataTables.Load("A|B")
        End If

 

If DataTables.Contains("C") = False Then
            DataTables.Load("C")
        End If

 2.能否在加载表之前先取消关联?等加载好了再重新建立关联?

 


 

 

[此贴子已经被作者于2019/9/22 8:57:56编辑过]

--  作者:狐狸爸爸
--  发布时间:2019/9/22 10:15:00
--  
加载多个关联表:http://www.foxtable.com/webhelp/topics/2755.htm

卸载多个关联表:http://www.foxtable.com/webhelp/topics/2756.htm