以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于根据子表条件加载父表的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=16580)

--  作者:dlovef
--  发布时间:2012/2/17 21:41:00
--  [求助]关于根据子表条件加载父表的问题

项目设定如下,

有“表A”与“表B”两个表,且表B是表A的子表。

假定表A有A1,A2,A3三个字段,表B有B1,B2,B3三个字段,且A1与B1是关联字段

如果我想从表A中检索出B2大于零的字段,那么写成SQL的话应该是这样的

“Select * from 表A Where A1 In (Select B1 from 表B where B2 > 0)”

 

而在Foxtable中,如果我把表A的LoadFilter设成“A1 In (Select B1 from 表B where B2 > 0)”的话,是会报错的。

假如我先行通过处理,先把“Select B1 from 表B where B2 > 0”的结果,拼成字符数组(假定变量String)的话,

将表A的LoadFilter设成“A1 In (String)"貌似可以解决这个问题,但是当Select B1 from 表B where B2 > 0”的结果含有较大的数据量时,String会变超大,甚至数组越界而报错。

 

不知我的问题说明白没有,请问一下如何解决呢。


--  作者:狐狸爸爸
--  发布时间:2012/2/18 9:49:00
--  
可以解决,不用Load,用Fill。
--  作者:dlovef
--  发布时间:2012/2/18 14:49:00
--  
我之前也是研究过Fill的,可总觉得Fill是将SQL的结果填充到另外一个表的,而不是加载到当前表的。理解有误是吗?
--  作者:dlovef
--  发布时间:2012/2/18 14:54:00
--  

动态加载总结

前面介绍了各种动态加载数据的方法,现在总结一下:

1、如果是从同一个表重新加载数据,那么使用DataTable的Load方法。

2、如果需要从另一个表加载数据,那么用Fill方法。


--  作者:狐狸爸爸
--  发布时间:2012/2/18 15:50:00
--  
以下是引用dlovef在2012-2-18 14:49:00的发言:
我之前也是研究过Fill的,可总觉得Fill是将SQL的结果填充到另外一个表的,而不是加载到当前表的。理解有误是吗?

 

建议而已,也可以当前表,Load解决不了,就用Fill。


--  作者:dlovef
--  发布时间:2012/2/18 16:15:00
--  

我想试一下Fill,可是报错说“当前表存在关联,不允许使用此方法加载数据”,抓狂了,怎么办?

而且关联不能丢。

[此贴子已经被作者于2012-2-18 16:15:16编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/2/18 16:24:00
--  

我也没有办法,用冬天那关联吧, Fill前删除关联,Fill后重新建立关联。


--  作者:dlovef
--  发布时间:2012/3/12 17:19:00
--  
狐爸,有没有可能让Load里的条件完全替换适应普通SQL语句中Where后的内容呢。我现在用A1 In (String)的方法,由于数据量太大,执行性能真的是太不理想了,检索一次要五分多钟
--  作者:dlovef
--  发布时间:2012/3/15 14:45:00
--  
老大,求助啊
--  作者:狐狸爸爸
--  发布时间:2012/3/15 17:02:00
--  

这个比较难,复杂的语法,你直接用Fill吧,完全兼容SQL。