以文本方式查看主题 - 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框输入,然后复制对应的值去到数据表里各列,数据表在窗口中是禁止直接编辑的。例图如下: 在窗口按钮“新增”的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以后,数据表里的动态数据字典已经不在了
|