delphi FireDAC制作主从表
需求: 窗体上下两个表,上面是主表,下面是从表.
当点击主表上的记录时,从表显示出此物料的入仓记录
效果如下图所示
操作步骤:
正常设置 主表+DS主表, 从表+DS从表
主表
然后是设置 从表
然后我们必须要理解的是: 从表 的数据应该是根据 主表 选择的记录来进行筛选的
但是 主表 里面那么多字段,你得给出个筛选条件才行吧,所以我们还得再处理一下 从表 .
在 从表 的属性面板中,设置这三个属性:
MasterSource:设置为 主表 的数据集 DS主表
MsterFields:设置为 从表用来筛选的条件字段,比如这里是按主表的 物料代码 这个字段的值,在从表中筛选,并返回数据的.
indexFieldNames:从表 里的响应字段
这里解释一下吧.大家有没有发现,后两个属性的末尾是带有S的!也就是说它们是可以同时选择多字段的.点击属性右边的 "...",可以弹出设置窗口
然后就是 indexFieldNames作为响应 主表 筛选的字段,理应要与MsterFields 里设置的字段对应,不然会报错.
打个比方,主表 设置了两个条件字段,而从表设置了一个,或者三个响应字段,你让别人怎么跟你玩?
然后,程序就可以跑起来了!完成
二.使用动态参数 改良
在上面的基础上,我们将在 从表 的SQL中使用动态参数,然后在左边的面板中激活它Active:true.(不要点上面的 执行 ,会报错)
然后就是设置上面提到的三大属性了,设置没有什么不同,但是这回 indexFieldNames属性就不用设置了,直接留空就可以了.因为使用了动态参数.
运行起来效果如下.仔细观察一下,下面的运行效果和上面的运行效果,发现:同一个物料代码,第一种方法返回了3条记录,而这里却返回了8条记录.而数据库中实际记录数为8条,这是什么原因呢?这里先挖个坑.
使用动态参数的是有缺陷的.因为用户在每次点击主表数据时,从表都会向服务器进行查询操作,如果用户量很大的时候,会对服务器造成大负荷,因此这种方法不适用于用户量大的客户端应用中.
解决的方案是 把上面的两种方案,结合使用,
1.使用动态参数SQL命令.
2.正常设置上面的三属性(方法2只设置了其中两个属性)
3.设置从表的FeTchOptions-Cache-fiDetails:true属性
如此一来,当从表的数据就不会像方法2一样,用完就先了,而是会储存在内存中了,避免向服务器多次查询.
然后我又发现这第三种方案,运行起来后,同一个物料代码,从表里也只返回了3条数据....坑