Foxtable(狐表)用户栏目专家坐堂 → 如何返回一个变量表示表加载成功了


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

主题:如何返回一个变量表示表加载成功了

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
如何返回一个变量表示表加载成功了  发帖心情 Post By:2015/12/29 22:26:00 [只看该作者]

当打开项目时,会先加载几个其础表,但如果这几个基础表因为网络等原因没有全部加载成功,此时运行打开窗口的代码就会接连着弹出一堆的错误,如何才能获取某个表是否加载成功?
谢谢!

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 22:55:00 [只看该作者]

可以判断是否存在此表,没加载,就先加载。

 

If DataTables.Contains("表A") Then

 

End If

 

 


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/12/30 9:33:00 [只看该作者]

我不是指表没加载导致出错,而是在运行比如DataTables("表A").Load()后网络突然断开或其他原因导致表A并没有成功加载,所以后面再运行的代码就出错了, DataTables.Contains("表A")能判断这种情况吗? 

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/30 10:09:00 [只看该作者]

可以判断load前后的数据变化。如

 

Dim count As Integer = dt.DataRows.Count

dt.Load

If dt.DataRows.Count = 0 OrElse count <> dt.DataRows.Count Then

 

End If


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2016/4/18 20:50:00 [只看该作者]

在beforeOpenproject中用了如下的代码,其中数组中的表是beforeloadouttable中默认全部加载数据进来的几个基础表

'---如果有一个基础表没有加载成功禁止打开项目
Dim tbs() As String = "MoGroup|dtbSet|ftbSet|sqtb|sqtb2|QtbSet|Argtb|Caption".split("|")
For i As Integer = 0 To tbs.Length - 1
    If Tables(tbs(i)).Rows.Count = 0 Then
        msgbox("基础表没有加载成功,请重新打开项目!")
        e.Cancel = True
        Exit For
    End If
Next

上面的代码想实现如果某一个表的行数为0说明没有加载成功,就不能打开项目,这种写法是否正确
有两个问题
1、上面的exit for用于退出循环,在那个位置是否会出错,因为前面执行了e.cancel = true, 是否后面还需要写代码?
2、如果某个表有30行,会不会出现网络出故障只加载了10行这种情形出现,那要怎么办呢?每个基础表的行数未加载时是不知道的

谢谢!



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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/18 20:53:00 [只看该作者]

1、beforeOpenProject不能用Tables,那时候还没生成表;必须等到AfterOpenProject

 

2、单独做一个表记录要加载的内容,不满足就退出。


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2016/4/18 21:26:00 [只看该作者]

那是否就所相同的代码移动到afteropenproject 的最前面?
Dim tbs() As String = "MoGroup|dtbSet|ftbSet|sqtb|sqtb2|QtbSet|Argtb|Caption".split("|")
For i As Integer = 0 To tbs.Length - 1
    If Tables(tbs(i)).Rows.Count = 0 Then
        msgbox("基础表没有加载成功,请重新打开项目!")
        System.Diagnostics.Process.GetProcessesByName("Newsource")(0).Kill  '直接结束进程退出
        Exit For
    End If
Next
还有一个同样的问题,只要有一个表没有加载成功,就退出,那exit for这句还要不?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/18 21:28:00 [只看该作者]

 可以放在最前。

 

 Exit For 要不要都没关系,已经kill掉了。


 回到顶部