Foxtable(狐表)用户栏目专家坐堂 → 关于动态捆绑表的几个问题请教专家!《开发版用户》


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

主题:关于动态捆绑表的几个问题请教专家!《开发版用户》

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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
关于动态捆绑表的几个问题请教专家!《开发版用户》  发帖心情 Post By:2013/3/1 18:00:00 [显示全部帖子]

正在学做一个项目,涉及窗口表控件的问题,试了几天还是没彻底明白。具体情况:

外部sql数据源,窗口里有一个页面集合控件,几个page页面共用一个Table控件,一个记录表控件,因为不能在设计阶段直接设置捆绑表,所以考虑用事件动态捆绑表。但是发现几个问题,请教:

1.动态捆绑记录表的方法是:记录表变量名.table = tables(“要捆绑的表名”),还有其它方法吗?

2.动态捆绑table控件的方法好像不能用捆绑记录表的方法了,我试过,只能用:tables(“窗口_table1").dataSource = tables("要捆绑的表名”),对吗,还有其它方法么?

3.动态捆绑表后,都需要在窗口控件中重新生成,否则无法显示数据。记录表用build方法,这个明白了,但table控件用什么方法好呢?

4.table控件加载数据,我试过用fill方法可以,但问题也出现了,fill方法用过之后,table控件的类型就变成了sqlquery类型,table控件表的数据和主表数据貌似不能实时同步了。我想实现像单独在表控件属性里设置后那样,某个表捆绑到table控件(副本类型)后,主表和副本能实现同步更新,包括增、删、上、下、更改等。只能用代码吗,请指点。

5.几个page页面共用表控件还有哪些问题需要重点注意,我还在学习中,如能提醒一下,可以减少我的弯路,虽然碰见问题未见得是坏事,但我时间紧啊,呵呵。

谢谢专家!

 


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/3 17:52:00 [显示全部帖子]

谢谢提醒,我的思路走到窄路去了,现在换了个思路。

一个父表,七八个子表,都设置单向关联表。共用一个窗口,表控件数量和关联表数量相等,并全部设置绑定(原来想用一个表控件,代码动态绑定关联表),用单选控件控制每次只显示一个表控件。输入控件按特征用“页面集合”控件分类,和单选控件联动,有效或无效。按钮控件“增加一行”“删除一行”等共用。

因为按钮控件共用,所以设置了2个全局变量,一个字符型变量“btname”,用来获取当前显示有效的表控件所绑定的表名,一个是table变量“tab”,用来获取当前有效表。

用“增加一行”按钮举例,代码如下

Select Case e.Form.Controls("RadioButton1").Select()
Case True
btname = e.Form.Controls("Table1").BindingField
Case False
btname =e.Form.Controls("Table2").BindingField
End Select

Tables(btname).AddNew()
tab.Position =tab.Rows.count -1
Tables(btname).Position = Tables(btname).Rows.count -1

 

现在碰到一个问题,bindingfield好像不能获取绑定的表名。该用什么方法获取table控件绑定的表名嗯?

 


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/3 17:57:00 [显示全部帖子]

补充一下,上面的tab变量已通过单选控件的事件获取了当前表。

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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/3 20:11:00 [显示全部帖子]

哦,我太笨,直接用ntname=“**表名”就可以了。

不过,如果有N个关联表,想简化代码,每次把显示属性为“true”的table控件捆绑的表名赋值给“ntname”,代码该如何写?!这还是涉及到如何获取table控件所捆绑的表名的方法。


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/3 20:13:00 [显示全部帖子]

以下是引用yinyb36在2013-3-3 19:53:00的发言:
我用的是外部数据源,原先也是用一个父表,N个子表单向关联,绑定到Table,父表表名为“关联”,一个数据列:“关联ID”,内容包含所有子表关联列的不重复的数据,开始测试时也没什么问题,后来导入大量数据后(父表有12万行数据,有些子表行数近三万),选择不同的子表时打开速度太慢(10多秒),后来找到了原因:tables("关联").load 加载时间太长!

嗯,谢谢,我记着,load方法每次全部载入数据,所以数据量大了才变慢。

另外,你提到的N个关联表捆绑到table是如何实现的?动态捆绑?还是放N个table控件到窗口。


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/4 11:49:00 [显示全部帖子]

谢谢指点。

上面这段代码应当是var变量(表名)发生变化后的触发事件,那么当窗口控件“table1”捆绑表后(tb.datasource=dtb),vars("mtb”)所对应的表的数据发生了变化,窗口控件"table1"所捆绑的表"dtb"会同步更新数据吗?


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


加好友 发短信
等级:幼狐 帖子:117 积分:1052 威望:0 精华:0 注册:2012/10/12 13:36:00
  发帖心情 Post By:2013/3/6 9:35:00 [显示全部帖子]

谢谢,认真学习,以后还要多请教!


 回到顶部