以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何返回一个变量表示表加载成功了 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79369) |
-- 作者:happyft -- 发布时间:2015/12/29 22:26:00 -- 如何返回一个变量表示表加载成功了 当打开项目时,会先加载几个其础表,但如果这几个基础表因为网络等原因没有全部加载成功,此时运行打开窗口的代码就会接连着弹出一堆的错误,如何才能获取某个表是否加载成功? 谢谢!
|
-- 作者:大红袍 -- 发布时间:2015/12/29 22:55:00 -- 可以判断是否存在此表,没加载,就先加载。
If DataTables.Contains("表A") Then
End If
|
-- 作者:HappyFt -- 发布时间:2015/12/30 9:33:00 -- 我不是指表没加载导致出错,而是在运行比如DataTables("表A").Load()后网络突然断开或其他原因导致表A并没有成功加载,所以后面再运行的代码就出错了, DataTables.Contains("表A")能判断这种情况吗? |
-- 作者:大红袍 -- 发布时间: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 -- 发布时间: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行这种情形出现,那要怎么办呢?每个基础表的行数未加载时是不知道的 谢谢! |
-- 作者:大红袍 -- 发布时间:2016/4/18 20:53:00 -- 1、beforeOpenProject不能用Tables,那时候还没生成表;必须等到AfterOpenProject
2、单独做一个表记录要加载的内容,不满足就退出。 |
-- 作者:HappyFt -- 发布时间: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这句还要不?
|
-- 作者:大红袍 -- 发布时间:2016/4/18 21:28:00 -- 可以放在最前。
Exit For 要不要都没关系,已经kill掉了。 |