以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  对帐单的做法  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=58366)

--  作者:HappyFt
--  发布时间:2014/10/15 21:45:00
--  对帐单的做法

如下图结构的客户对帐单:上面主表选择客户、对帐月份、开始日期及截止日期后通过datacolchanged事件从几个表中查询得到明细数据填充到下面的明细表中,


此主题相关图片如下:360截图20141015212641527.jpg
按此在新窗口浏览图片

 

下面的明细表结构是事先已经设计好的,我现在只知道先将符合条件的数据查询生成一个临时表dt,

Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandText = "Select * 。。。。。"   \'查询语句
Dim dt As DataTable = cmd.ExecuteReader()

然后再遍历dt中的每一行新增到明细表中,但这样感觉速度很慢。

 

除了这样方式还有没有其他办法?要保证保存过后再打开时主表选择不同的客户及对帐年月时明细中就会显示相应的明细数据出来就行。

 

谢谢!


--  作者:有点甜
--  发布时间:2014/10/15 21:50:00
--  

 不要填充,直接用SQL语句,用union关键字。

 

五、UNION 运算符

UNION运算符用于组合两个查询的结果。
例如有一个客户表,一个供应商表,我需要得到所有在中国的客户和供应商的名称和地址。
因为数据位于不同的表中,显然,我们需要用两个查询才能完成任务:

SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\'

两个查询的字段名称、个数、类型必须完全一致才行。

默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如:

SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION ALL SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\'

 

 或者用foxtable的语法

 

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

 


--  作者:HappyFt
--  发布时间:2014/10/15 21:56:00
--  
怎么查询出数据来我会,我不知道要怎么将查询到的数据显示在明细表中,而且要求明细表中只是显示数据,用户不能编辑。如果明细表直接用查询表,却又不能保存,下次打开主表后明细表中又会没数据。

即要求明细表查询得到的数据不能编辑,但又可以保存,而且还有一列必须是与主表有关联的关联列,这样下次打开才能正确加载数据出来。

--  作者:有点甜
--  发布时间:2014/10/15 22:00:00
--  
 你这种情况,就是应该用查询表来做的,每次打开的时候,重新生成一张查询表。
--  作者:HappyFt
--  发布时间:2014/10/15 22:09:00
--  
因为查询是从多个表中查询数据(还有退货单等有好几个)中联合查询的,如果每次打开的时候都重新生成一张查询表的话效率太低了,我就是想第一次查询生成后就把它保存下来,下次打开就不用查询只加载就可以。难道这样不可以实现吗?谢谢
--  作者:有点甜
--  发布时间:2014/10/15 22:13:00
--  

 呃,你生成一张表,打开系统的时候,也是要去把这张表的数据查出来的,相当于你做一个查询表,而且查询表的效率不低。


--  作者:HappyFt
--  发布时间:2014/10/15 22:18:00
--  
那这样我是不是直接在主表的Currentchanged事件中,直接根据主表行的客户,对帐年月,开始及截止日期做个查询直接fill或绑定到明细表中就行了。关联也就不用考虑了。
--  作者:有点甜
--  发布时间:2014/10/15 22:20:00
--  
 是的
--  作者:HappyFt
--  发布时间:2014/10/15 22:29:00
--  
看来很多问题都不明白,想多了。谢谢!