以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于关联后父表新数据,子表更新不及时的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=65042)

--  作者:likaibin1983
--  发布时间:2015/3/8 1:30:00
--  [求助]关于关联后父表新数据,子表更新不及时的问题
1. 情况描述

建立两个内部数据表,设置了表关联,当在子表列属性中启用“数据字典”功能,从父表中取对应的值,会出现:

当父表中新增行数据时,子表中下拉菜单看不到父表新增的行数据(此列已与父表关联),只能看到并选择父表该列旧的数据。必须关闭foxtable以后重新打开,才能看到父表中新增行内容。

2. 测试

无论表关联里是否勾选“同步更新关联列内容”,
无论建立窗口表控件,还是在表里本身操作,
无论如何在表间切换,
都会出现此问题。

请问这个如何破解?要通过代码实现吗?还是我哪里没搞对?


--  作者:有点甜
--  发布时间:2015/3/8 9:30:00
--  

数据字典只会在项目启动的时候才生成一次的。

 

如果想实时生成,参考例子

 

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

 


--  作者:likaibin1983
--  发布时间:2015/3/8 13:28:00
--  
谢谢版主,我还想问的更细一点,我的实际工况是:

建立了一个模式窗口,把新增的数据都通过模式窗口中各项文本框和combobox框输入,然后复制对应的值去到数据表里各列,数据表在窗口中是禁止直接编辑的。例图如下:


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

在窗口按钮“新增”的click代码中,以“项目场地”为例,我的思路是通过跨表引用,先看输入或选取在combobox里的项目场地是否在“场地信息”数据表中已存在的,
case 1, 如果在,则在“项目信息”表中addnew,直接把“场地信息”里该行的关联编号赋值到“项目信息”表的新增行中
case 2, 如果是新的项目场地,在“场地信息”表里没有记录过的,则先在“场地信息”表里addnew,把该值赋值到此表中,通过代码自动生成独立的关联编号,然后再把此“场地信息”表里该新增行的关联编号赋值到“项目信息”表的addnew新行里。

问题来了,在预览操作时,出现case2的情况时,“场地信息”表能得到正确赋值与计算出关联编号,在“项目信息”表里也能新增行,但不能得到该新增项目场地的赋值,部分代码如下,请帮忙看一下问题出在哪?

 Dim r As Row = Tables("项目信息").addnew
 Dim dr1 As DataRow = DataTables("场地信息").Find("[场地名称] = \'" & xmcd.value & "\'")    {说明,xmcd为项目场地combobox里的值}
    If dr1 IsNot Nothing Then       {说明:如果找到了同名的产品行,也就是dr不是Nothing}
        r("项目场地编号") = dr1("场地关联编号")
    Else
        Dim dr1x As Row = Tables("场地信息").AddNew
        dr1x("场地名称") = xmcd.value
        r("项目场地编号") = dr1x("场地关联编号")
    End If

说明:“场地信息”表与“项目信息”表在“场地名称”这一列本身是父子关联的,并通过列属性里的数据字典取值“场地关联编号”(整数型)这一列的值,显示“场地名称”(字符型)列的内容。

是不是问题出在列属性数据表字典里?该怎么解决呢?

谢谢!!

--  作者:有点甜
--  发布时间:2015/3/8 14:24:00
--  

 请看2楼的帮助文档啊。

 

 你新增行以后,要重新生成一次数据字典


--  作者:likaibin1983
--  发布时间:2015/3/8 15:10:00
--  

好的,我再试试,大致有点感觉了。


--  作者:likaibin1983
--  发布时间:2015/3/8 22:41:00
--  
谢谢版主,已经用上了,我的问题已解决,不过又出来一个新的小问题:

每次操作完以后,必须要切换一下maintable,才能显示值出来,因为用的是“maintablechanged”项目时间,有什么办法能实时显示吗?只要代码一执行,不用切换maintable,直接能显示。

--  作者:有点甜
--  发布时间:2015/3/8 22:43:00
--  
 拷贝 maintablechanged 的代码,写到 Datacolchanged 事件去,或者写到 prepareEdit 事件中去
--  作者:likaibin1983
--  发布时间:2015/3/8 22:46:00
--  
太快了回复。。。那这样不用这个了吧?

If MainTable.Name = "项目信息" Then

--  作者:有点甜
--  发布时间:2015/3/8 22:47:00
--  
 嗯是的。
--  作者:likaibin1983
--  发布时间:2015/3/8 22:51:00
--  
版主,我试过了,还是不行。

不管用在全局表事件里的prepareedit还是datacolchanged,都不能实时显示,而且重启foxtable以后,数据表里的动态数据字典已经不在了