以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]SQL动态加载子表的问题,再求助!!!!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=45853)

--  作者:浙江仔
--  发布时间:2014/2/12 13:24:00
--  [求助]SQL动态加载子表的问题,再求助!!!!
主表: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编辑过]

--  作者:狐狸爸爸
--  发布时间: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编辑过]

--  作者:浙江仔
--  发布时间:2014/2/12 15:05:00
--  
主要是我的主表是全部加载的,不是动态加载的。我想不加载子表,用SQL语句,这样减少子表的加载
订单表的AfterLoad事件的话,还是要加载子表的



--  作者:狐狸爸爸
--  发布时间: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
--  发布时间:2014/2/12 15:09:00
--  
"Select * From {tab_YanHuaWGJL} where {tab_YanHuaWGJL}.企业ID =" & tables(tab_QYInfo).current("企业ID")
--  作者:狐狸爸爸
--  发布时间:2014/2/12 15:17:00
--  
同一个表,还是别用Fill,用Load比较好,不用重新生成表结构。
--  作者:浙江仔
--  发布时间:2014/2/12 16:07:00
--  
谢谢
--  作者:浙江仔
--  发布时间: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")& "\'

只能用狐爸的办法了么?

--  作者:浙江仔
--  发布时间:2014/2/12 19:51:00
--  
再求助顶上去
--  作者:浙江仔
--  发布时间:2014/2/13 8:11:00
--  
再问