Foxtable(狐表)用户栏目专家坐堂 → [求助]多个窗口引用同一个父子出现数据冲突怎么解决?|


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

主题:[求助]多个窗口引用同一个父子出现数据冲突怎么解决?|

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
[求助]多个窗口引用同一个父子出现数据冲突怎么解决?|  发帖心情 Post By:2013/12/24 13:44:00 [显示全部帖子]

窗口1 父表C,子表D 

窗口2,父表E,子表1:F  (其中F有子表D)

                   子表2:C。窗口2中有3个父子表关系。E-F ,E-C,F-D

以上父表都是分页动态加载

 

当1.open时候,显示了C,加载了D

当2 OPEN而A没有关闭的时候,显示E,加F,C。本来只显示F的子表部分D。但是因为加载C,从而也引起了窗口1的 C变动,也加载了部分D。

这个时候窗口2部分D和窗口1的部分D数据混合在一起,数据变乱了,这个该怎么解决。

是不是所有的表只能用SQL TABLE

而无法使用下面的这个分页动态加载的方式

 

父表与子表同步加载

假定有两个表,分别是订单和订单明细,两者通过"订单ID"列关联起来,订单是父表,订单明细是子表,因为每个订单对应有若干订单明细。
由于数据量比较大,决定采用动态加载,每次只加载一定数量的订单进行处理,显然作为一个合格的系统,应该同时加载这些订单的订单明细。

要完成这样的任务很简单,只需在订单表的AfterLoad事件中加入以下代码即可:

If DataTables("订单").DataRows.Count = 0 Then '如果订单表没有数据
    DataTables(
"订单明细").LoadFilter = "订单ID Is Null" '不加载订单明细
Else
    Dim 
ids As String
    For Each 
dr As DataRow In DataTables("订单").DataRows
        
ids = ids & "," & dr("订单ID")
    Next
    
idsids.Trim(",")
    DataTables(
"订单明细").LoadFilter = "订单ID In (" & ids & ")"
End If
DataTables(
"订单明细").Load()

 

[此贴子已经被作者于2013-12-24 13:46:54编辑过]

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/12/24 15:01:00 [显示全部帖子]

以下是引用jspta在2013-12-24 14:24:00的发言:
这张子表父表关系太多维护会产生困难,最重要是你产生了一个子表对应了2个父表,父表还是别人的子表,已加载当然出错。

解决方案很简单,关系单一话,一张表尽量不要重复使用多次

jspta,如果有的子表在不同的窗体中必须要重复使用和加载,那么动态加载那个方法不就是没有办法使用了吗!就是说普通动态加载的方法只适合简单的不出现在不同窗口中重复加载的表,否则会互相影响。

 

但是如果用SQL TABLE,你无论在任何窗口中重复加载多少次,无论怎么倒腾他都一点也错不了,因为每个SQL TABLE都是产生的独立表,而不像普通的动态加载那样,一个表在不同的窗体中互相影响。

[此贴子已经被作者于2013-12-24 15:01:31编辑过]

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/12/24 15:44:00 [显示全部帖子]

以下是引用jspta在2013-12-24 15:20:00的发言:
我目前还是使用窗口进行设计,所有的表都是使用SQl table进行动态加载的,不使用狐表的关联。
每张表独立,需要关联自己再添加。
尽量少用数据表间直接的关联,以后维护起来会有麻烦


 

 

谢谢,JSPTA,我的所有的操作都是在窗体中,看来要吧所有的都要改成SQL TABLE.

SQL TABLE要自己设置字段名和间距等都没有可视化,就是麻烦点,好多FT有用的工具利用不上了

 

一个系统要是复杂一些的,看来必须使用SQL TABLE,其他的小系统还可以普通的方式或者直接用表,不用窗口等

狐狸爸爸来给总结指点一下迷途吧


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/12/25 8:28:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-12-25 8:16:00的发言:

自己的设计逻辑问题,一方面其实根据F加载D(条件1),另一方面根据C加载D(条件2),两个条件不同,自然混乱,实在要做的话,你合成条件的时候,同时还称条件1和条件2,加载条件改为: 条件1 Or 条件2

 

此外,一般的系统,正常使用关联和关联表就行,再说了,现在还有动态加载和卸载表的功能,没有搞得这么复杂的,我做系统的话,就很少用SQLTable。

比如我在一个窗体中分2个部分,根据需要都显示同一个表,

上部分为条件1,分页加载表A

下部分问条件2,分页加载表A

条件2的数据一分页,条件1的数据分页就乱了,这种情况是不是必须用SQL TABLE

 


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/12/25 8:51:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-12-25 8:33:00的发言:

加载条件是: 条件1 Or 条件2

然后第一个Table的Filter属性设置为条件1,第二个Table的Filter属性设置为条件2

这样就会各自显示自己的数据。

 

 

 

为了避免用户取消筛选,可以用这个事件:

http://www.foxtable.com/help/topics/2059.htm

 

if e.Table.Name = "table1的名称" Then

   Dim fl As String = 条件1

   if e.filter = ""

      e.filter = fl

   else if e.filter.indexof(fl) < 0 Then

       e.filter = e.filter & “ And ” & fl

  end if

end if

 

条件1和条件2可以保存在两个全局变量中,方便调用

[此贴子已经被作者于2013-12-25 8:45:01编辑过]

 

 

 

 

 

 

没有看明白下面这部分的意思

取消筛选是什么意思

 

为了避免用户取消筛选,可以用这个事件:

http://www.foxtable.com/help/topics/2059.htm

 

if e.Table.Name = "table1的名称" Then

   Dim fl As String = 条件1

   if e.filter = ""

      e.filter = fl

   else if e.filter.indexof(fl) < 0 Then

       e.filter = e.filter & “ And ” & fl

  end if

end if

 

条件1和条件2可以保存在两个全局变量中,方便调用


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/12/25 9:48:00 [显示全部帖子]

以下是引用jspta在2013-12-25 9:05:00的发言:
你这个实在没办法用关联的,只能自己关联,用副本表进行Filter是不是可行。

你实在要关联,只能这样,原来C表,变成C1,C2,分别进行关联(外部表可以重复加载,只需要加载名称不同就可以)

你可以上传例子

[此贴子已经被作者于2013-12-25 9:06:54编辑过]

binhe ,jspta说的对,就是做也很麻烦或者无法做,但是用SQLTABLE解决起来很容易就一个TABLE.FILL

 

这个只是举一个列子,就是想问问大家,

在基于窗口为中心的模式下,一般大家做的比较成熟的系统是不是基本上都用SQL TABLE方式,而不用其他的方式。

非基于窗口的可能其他方式更核实

[此贴子已经被作者于2013-12-25 9:49:29编辑过]

 回到顶部