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


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

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

帅哥哟,离线,有人找我吗?
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页面共用表控件还有哪些问题需要重点注意,我还在学习中,如能提醒一下,可以减少我的弯路,虽然碰见问题未见得是坏事,但我时间紧啊,呵呵。

谢谢专家!

 


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/1 18:08:00 [只看该作者]

将《窗口中的Table》这部分研究透,从这节开始:

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

 

 

没有必要刻意追求动态,通常只是动态加载数据,而不是动态生成Table控件。

SQLTable和SQLQuery一般只是辅助,而不是基本。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
run1973
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

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


加好友 发短信
等级:四尾狐 帖子:953 积分:7252 威望:0 精华:0 注册:2011/9/6 13:36:00
  发帖心情 Post By:2013/3/3 19:53:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
run1973
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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控件到窗口。


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


加好友 发短信
等级:四尾狐 帖子:953 积分:7252 威望:0 精华:0 注册:2011/9/6 13:36:00
  发帖心情 Post By:2013/3/3 21:51:00 [只看该作者]

当然是分别捆绑,不过我现在没用关联表捆绑了,我现在所有窗口的Table都是动态绑定的.

建议你Var变量,如Vars("btname"),要打开什么表,只要将此变量赋值你要打开的表的表名即可


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


加好友 发短信
等级:四尾狐 帖子:953 积分:7252 威望:0 精华:0 注册:2011/9/6 13:36:00
  发帖心情 Post By:2013/3/3 22:27:00 [只看该作者]

GlobalVariableChanged事件可参考下面的代码:

If e.Name = "mtb" Then ‘var变量名
    If Forms("主窗口").Opened Then
        Dim btn As WinForm.Button = Forms("主窗口").Controls("加载") '动态加载"主窗口_Table1"的按扭,设为不可见
        btn.PerformClick
        If Vars("mtb") > "" Then
            Dim tbl As WinForm.Table = Forms("共有窗口").Controls("Table1") 

            Dim tb As Table = tbl.Table        ‘代替父表,设为不可见
            Dim cmd As new SQLCommand
            cmd.ConnectionName = "数据库名称"
            cmd.CommandText = "Select DISTINCT 关联ID From {" & Vars("mtb") & "} order by 关联ID"
            dim dtb as datatable = cmd.ExecuteReader
            tb.DataSource = dtb
        End If
    End If
    If Forms("共有窗口").Opened Then
        Dim btn As WinForm.Button = Forms("共有窗口").Controls("加载")
        btn.PerformClick
    End If
End If

[此贴子已经被作者于2013-3-3 22:35:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
run1973
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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"会同步更新数据吗?


 回到顶部
总数 13 1 2 下一页