Foxtable(狐表)用户栏目专家坐堂 → [求助]SQL动态加载子表的问题,再求助!!!!


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

主题:[求助]SQL动态加载子表的问题,再求助!!!!

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
[求助]SQL动态加载子表的问题,再求助!!!!  发帖心情 Post By:2014/2/12 13:24:00 [只看该作者]

主表:tab_QYInfo
子表:tab_YanHuaWGJL,tab_QYGLRY,tab_QYEquip....等通过[企业ID]关联的九个子表

目前系统设置主表附表全部加载,但是感觉因为表格多,数据多了,启动太慢了,所以想动态加载数据表。

看了“父表与子表同步加载”的例子,我感觉项目一开始主表全部加载了,子表也会全部加载,没有限制加载的效果了。(是不是这样理解的?

所以在窗体关联表中想用“SQLTable”代替“Normal”的tab_QYInfo.tab_YanHuaWGJL(等其他子表)
主表选中不同记录,窗体中的Table(子表)会显示不同记录,
如图窗体

此主题相关图片如下:捕获d23232d.jpg
按此在新窗口浏览图片

想用SQL的代码实现同样效果,该怎么写这句SQL代码,谢谢自己瞎写了一下,发现不对,
Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = {tab_QYInfo}.企业ID

Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = 'DQ201303731'
可以列出记录
但是用表达式就不行,怎么回事?
Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = '" &  tables("tab_QYInfo").current("企业ID")& "'
不能识别tables("tab_QYInfo").current("企业ID")
 
我在主表 CurrentChanged事件设置了全局变量

If e.Table.Current Is Nothing Then
    Vars("CurrID")=""
Else
    Vars("CurrID")=e.Table.Current("企业ID")
End If

这语句也不行

Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = '" &  Vars("CurrID") & "'


狐爸说:

那就设置主表的CurrentChanged事件,假定企业ID是字符型:

 if e.table.Current Is Nothing Then

    DataTables("子表").LoadFilter = "[_Identify] Is Null"

Else

    DataTables("子表").LoadFilter = "企业ID = '" & e.Table.Current("企业ID") & "'"

End if

DataTables("子表").Load()


但是我觉得也不合理,因为我选中主表后,子表不需要同时显示的,所以也不用全部根据[企业ID]重新加载了。

我需要点击子表的时候,该子表进行关联加载,这样该怎么实现?


望狐爸指点,望前辈指点,谢谢




[此贴子已经被作者于2014-2-12 19:53:49编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/12 14:40:00 [只看该作者]

子表和父表同步加载:
 
http://www.foxtable.com/help/topics/2228.htm

 
如果是2014版,更加简单:
http://www.foxtable.com/help2/topics/2894.htm
 
这个函数还会改进,可以直接指定关联列,方便没有建立关联时的同步加载。

[此贴子已经被作者于2014-2-12 14:40:09编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2014/2/12 15:05:00 [只看该作者]

主要是我的主表是全部加载的,不是动态加载的。我想不加载子表,用SQL语句,这样减少子表的加载
订单表的AfterLoad事件的话,还是要加载子表的



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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/12 15:08:00 [只看该作者]

那就设置主表的CurrentChanged事件,假定企业ID是字符型:

 

if e.table.Current Is Nothing Then

    DataTables("子表").LoadFilter = "[_Identify] Is Null"

Else

    DataTables("子表").LoadFilter = "企业ID = '" & e.Table.Current("企业ID") & "'"

End if

DataTables("子表").Load()


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/2/12 15:09:00 [只看该作者]

"Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID =" & tables(tab_QYInfo).current("企业ID")

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/2/12 15:17:00 [只看该作者]

同一个表,还是别用Fill,用Load比较好,不用重新生成表结构。

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2014/2/12 16:07:00 [只看该作者]

谢谢

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2014/2/12 16:24:00 [只看该作者]

Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = 'DQ201303731'
可以列出记录

但是用表达式就不行,怎么回事?
Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID = '" &  tables("tab_QYInfo").current("企业ID")& "'

只能用狐爸的办法了么?

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2014/2/12 19:51:00 [只看该作者]

再求助顶上去

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2014/2/13 8:11:00 [只看该作者]

再问

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