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条数据....坑

 

posted @ 2023-01-31 19:08  一曲轻扬  阅读(411)  评论(0编辑  收藏  举报