Foxtable(狐表)用户栏目专家坐堂 → 使用FT最令人揪心的问题


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

主题:使用FT最令人揪心的问题

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
使用FT最令人揪心的问题  发帖心情 Post By:2016/5/24 15:12:00 [显示全部帖子]

使用FOXTABLE进行开发设计最令人揪心的问题就是,同样的代码和工作方式正式使用的时候出问题。但单独测试的时候表现确象 完美。

但是如果你单独建立一个测试文件的时候,他又不出问题。这样的排错就非常困难,而官方也不能提供解决方法之道。 官方会说我们测试没有问题,二说,你做个例子上来吧,(但是整个项目没有几个人愿意发上来的,于是只有自己绕着路走,官方也会因此失去一个底层代码排错的机会)


比如在一个窗口中:

Dim g As New GroupTableBuilder("统计表", DataTables("表A"))
g.Groups.AddDef("第一列", "第一列_值")
g.Totals.AddDef("第一列", AggregateEnum.Count, "第一列_计数")
g.Build()

Dim tb1 As Table = e.Form.Controls("Table1").Table
tb1.DataSource = DataTables("统计表")

然后再 关闭窗口事件里:

If DataTables.Contains("统计表") Then
    DataTables.Unload("统计表")
End If

单独 测试本事件 时: 这个代码 不管是放在BeforeClose在关闭窗口前执行。 还是 AfterClose 在关闭窗口时执行,此时还可以引用窗口中的控件。
执行都没问题。


但是实际使用过程中:
如果类似代码放在 BeforeClose 中则不行。


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160524145612.png
图片点击可在新窗口打开查看

放在 AfterClose 事件中,则不至于软件死循环报错,但也报错 不存在某某表 的信息。

可用解决方法是: 在 AfterClose 事件卸载表之前,将窗口表的tb1.DataSource = DataTables("表A") 绑有定一个绝对存在的表,系统才正常关闭窗口,不报任何错误信息。


请问这个 不存在名称为”“ 的DATATABLE 还与哪些事件有关,实在找不到解决问题的真正方法。提前改变 DataSource 应该不是终级方法。

FOXTABLE什么时候能再长大点,在所有的地方表现统一点,稳定点,像这样的问题 不需要用户自己展开反复的测试,自己想办法解决问题?


[此贴子已经被作者于2016/5/24 15:13:59编辑过]

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 15:32:00 [显示全部帖子]

用buildDataSource啊 是可以解决 统计表的问题。这样用,实际生成一个 所属窗口的 临时表,窗口卸载时不用用代码卸载了,表自动销毁。
但有时并不是 统计表呀,用统计表举例说明 是方便生成一个临时 表

在实际使用过程中,肯定存在先建立了一个临时的DATATABLE然后绑定到窗口的表,关闭窗口时要卸载这个表,那么问题还存在呀

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 15:41:00 [显示全部帖子]

此例的关键是 为什么同样 的用法 在单独测试时表现尚可 一到实际使用时,表现就出状况,难道就因为,窗口里的功能,事件多了一些。


拿统计表 举例说明只是方便建立一个临时表。

统计表不需要删除的.说法我也不大同意 ,如果 一个系统在应用过程中,多次产生了临时的统计表,在不需要使用时,肯定要删除,以节省系统资源,企业好多电脑都非常垃圾,早七八年的电脑都在使用,不得不考虑。另有些统计表可以多数地方要使用,也不会都放在窗口里,随窗口关闭而关闭。得生成一次让程序共享,如果这样的需求,需要时就再生成一次,也是设计不合理的。

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 15:57:00 [显示全部帖子]

这就是揪心的不问题,例子做了几次都正常,就是项目里的不正常。能远程么

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 16:03:00 [显示全部帖子]

项目里面就不正常

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 16:19:00 [显示全部帖子]

唉 没时间反复测试 了

在关闭卸载表前 先将窗口表 绑定到一个 内部表吧

For Each vsc As String In gs_LshiBiaozd.Values '显示所有值 清空临时生成的所有数据导入建立的临时表,该类的表全部是 内部数据源
    If DataTables.Contains(vsc) Then
        Dim Builder As New ADOXBuilder
        Builder.Open()
        With Builder
            .DeleteTable(vsc)
        End With
        Builder.Close()
        DataTables.Unload(vsc)
    End If
Next
gs_LshiBiaozd.Clear '清除所有的键和值

For Each vsc As String In gs_LshiTjBiaozd.Values '显示所有值   清空临时生成的所有统计表
    If DataTables.Contains(vsc) Then
        Dim tb4 As Table = e.Form.Controls("Table4").Table   '关闭窗口前先改变tb4的绑定窗口 避免报错(系统BUG?)
        tb4.DataSource = DataTables("Main")   'g.BuildDataSource()  '关闭窗口前先改变tb4的绑定窗口 避免报错(系统BUG?)
        DataTables.Unload(vsc)
    End If
Next
gs_LshiTjBiaozd.Clear '清除所有的键和值
Dim tb2 As Table = Forms("数据导入").Controls("Table2").Table   '字段目标对应关系
tb2.DataTable.RejectChanges   '如果没有执行数据合并则取消对应关系的修改

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 16:32:00 [显示全部帖子]

经查找 是项目里的CurrentTableChanged事件 中的

代码  CurrentTable.DataTable.SysStyles("EmptyArea").BackColor = Color.White 报的错

如果关闭 这句代码 则不报错,否则就报错

这算不算系统BUG了  如何解决?

新建立一个空项目 在

CurrentTableChanged事件 中的

加入代码  CurrentTable.DataTable.SysStyles("EmptyArea").BackColor = Color.White 

再做测试就报错了


系统报错提示的时候 能加上是哪一个事件不,很多时候只看到报错,但不知道是哪一个事件里的代码报的错,一个系统开发久了,大了,互相影响的代码就多了,如何跟踪报错是个麻烦呀。且FT的事件触发机制,触发顺序,次数不是一件能容易弄得清楚的事情。

[此贴子已经被作者于2016/5/24 16:38:12编辑过]

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


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 16:40:00 [显示全部帖子]

已是最新版



图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160524163817.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:窗口表的卸载问题.foxdb


要不你加上代码判断一下

 

If currentTable Is Nothing Then Return  加上了 还一样的报错



不知老师的测试 为什么是正常的,这是更令人可怕的事情。
100%可控的报错是可以理解和排除的,但差异化的出错更令人担忧。



[此贴子已经被作者于2016/5/24 16:52:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/5/24 18:33:00 [显示全部帖子]

以下是引用jspta在2016/5/24 18:17:00的发言:
用form.createSQLTable生成啊,然后Fill方法填充,关闭窗口自动销毁,还会有什么绑定的烦恼?


这不是问题的关键,绕道解决的方法有好几个。只是 CurrentTable.DataTable.SysStyles("EmptyArea").BackColor = Color.White  这句代码暴露了 FOXTABLE掉进了 自身的逻辑陷阱了,CurrentTable.DataTable 本身对于FOXTABLE而言,按说是必然存在的一个对象。但CurrentTable.DataTable有时并不存在,不管你在外围加上什么判断代码都不生效,不能拦截。说明这个问题是FOXTABLE的底层代码的问题,看来只有掌握了底层源码的狐狸爸爸才有可能解决这个问题。


 回到顶部