以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  Datarowadded事件不触发和e.cancel失效  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=134053)

--  作者:Grandraw
--  发布时间:2019/4/26 9:25:00
--  Datarowadded事件不触发和e.cancel失效
老师好,

Foxtable高级开发版,另本人不是新手。

遇到两个奇怪的事件,有时候触发有时候不触发。程序太大且链接sql数据库,无法全部上传。

1. 窗口的beforeclose事件,偶尔e.cancel=true无法拦截关闭动作。
代码如下:

\'*****************************************************
\'判断是否存在修改,询问是否取消所有未保存的修改
If e.closemode=1 Then Return \'如果是通过代码关闭窗口的话,如cancel
Dim kr As Row=Tables("Customers").current

If kr Is Nothing Then  Return

Dim r As DataRow = kr.DataRow

Dim Havechanges As Boolean=False
  
If r.Rowstate<> DataRowState.unchanged Then HaveChanges=True
 

If Havechanges=False  Then Return \'直接退出窗口
e.cancel=True
messagebox.show("You have made changes. You must Save or Cancel the changes first.", "Closing", MessageBoxButtons.ok, messageboxicon.warning)
\'*****************************************************
我十次中有三四次会看到messagebox的警告,但是窗口还是被关闭;大多数时候窗口关闭动作还是会被拦截。
这种偶发性的问题令人摸不着头脑。

2. 表的datarowadded事件,今天居然遇到不能触发的情况。

简单一句事件代码测试,
messsagebox.show("已触发“)

清楚看到行已经添加,但没有messagebox。令人崩溃的是,我切换到同项目的另一个表,datarowadded事件却可以正确触发,又试了几个表,还是有的可以有的不行。





以上两个问题我实在找不到规律。
恳请老师帮忙提示一下可能的思路。谢谢










--  作者:有点蓝
--  发布时间:2019/4/26 10:39:00
--  
是开发项目有问题,还是发布后的项目有问题?

如果是前者,把项目里额bin目录删除掉,然后重启项目测试。

另外项目有没有放到共享目录,云盘目录里使用?

--  作者:Grandraw
--  发布时间:2019/4/26 11:17:00
--  
感谢及时回复,补充如下:

1. 开发的项目有问题。程序为高级开发版2019版

2. Bin删掉测试过了,问题没有解决。重启项目、重启电脑、重启服务器都试过了。问题依旧。

3. 项目在本地硬盘。

新发现的,我删除了所有的关联,结果该表的datarowadded恢复触发。表实在太多,目前还不清楚具体哪个关联导致的。

--  作者:有点蓝
--  发布时间:2019/4/26 11:35:00
--  
和这个表没有关系的关联是不会影响这个表的,查找这个表的关联即可。

不要过于依赖表关联,特别是复杂的多表父子孙的关联。

有没有做动态加载?关联表要一起加载。

项目启动后加载的表多不多,数据量大不大。网络差的话,可能加载5000行的数据就会有问题了

--  作者:Grandraw
--  发布时间:2019/4/26 11:47:00
--  
谢谢回复。

1. 我的关联表很少很少。只有其中几个为了便于表达式计算才设的。表存的产品信息,的数据很少。

2。关联表是一起加载的。

3. 我目前试着将所有其他的表和所有项目代码都删掉了,只留下有问题的这个表、它的父表、表间关联。问题依旧,datarowadded不能触发。
    一旦我删掉这个关联,datarowadded就开始触发。所以我基本肯定是这个关联的问题。

目前正想办法做个文件上来给你们看看,比较麻烦,sql server外部表重定向回来的时候总是说找不到关键列。

--  作者:有点蓝
--  发布时间:2019/4/26 11:58:00
--  
是不是外部数据库使用了Foxtable无法识别的列类型,或者加载了二进制列
--  作者:Grandraw
--  发布时间:2019/4/26 12:16:00
--  
这个不知道啊,所有外部表都是通过foxtable建立的。有时确实遇到莫名其妙的报错,比如找不到—identify之类的。
通过在foxtble中删除表另建表的方式绕开的。

--  作者:Grandraw
--  发布时间:2019/4/26 12:17:00
--  
二进制列是不是文件一类的列? 这个应该没有。都是普通的string类型和double类型
--  作者:Grandraw
--  发布时间:2019/4/26 12:41:00
--  
刚给您发了个邮件,foxtable@qq.com,所有的项目文件。辛苦了。



--  作者:Grandraw
--  发布时间:2019/4/26 13:52:00
--  
另外,补充一些内容,如下:

1. 如果删除关联,则事件恢复正常。

2. 如果删除表达式列(表达式列引用了关联表),则事件恢复正常。

3. 另外,我感觉出问题的似乎都是我比较早期建立的表。期间经历了几次foxtable程序版本的更新。

详见项目文件。