FDQuery和OnCalcFields,得到前面一行字

问题描述 投票:0回答:1

Delphi 10.3.3FireDAC: DBGrid FDQuery MySQLVCL

大家好

我有一个表格,里面有以下字段

----------------------
|  id  |    data      |
----------------------
|  1   | 0=A;1=B;2=C  |
|  2   | 2=Z          |
|  3   |              |
|  4   | 0=Y;1=X      |
|  5   |              |
|  6   |              |

id

我希望在DBGRID中显示这些信息。

-----------------------
|  id  | C0 | C1 | C2 |
-----------------------
|  1   | A  | B  | C  |
|  2   | A  | B  | Z  |
|  3   | A  | B  | Z  |
|  4   | Y  | X  | Z  |
|  5   | Y  | X  | Z  |
|  6   | Y  | X  | Z  |

我现在能做的只有下面这个表。

-----------------------
|  id  | C0 | C1 | C2 |
-----------------------
|  1   | A  | B  | C  |
|  2   |    |    | Z  |
|  3   |    |    |    |
|  4   | Y  | X  |    |
|  5   |    |    |    |
|  6   |    |    |    |

为了得到这个结果,我在事件FDQuery1.BeforeOpen中创建了额外的列,而在事件OnCreateFields中,我填入了每一列,但是... ... 我不知道前一行的内容,

那么,我怎么做才能在DBgrid中填补缺失的字段呢? 谢谢Franck

mysql delphi firedac
1个回答
1
投票

OnCalcFieldsFDQuery1.First是为了迫使它在FDMemTable数据可用后重新做计算字段(在最初的FDQuery1.Open期间,当然不能这样)。OnCreateFields在FDQuery的OnCalcFields事件中,使用类似这样的代码,将计算出的字段值建立在前一行的值上(当然如果有的话,第一行不能有 "前 "行)。

在这个例子中,我的查询数据集有一个... ...

主键,计算出的值就是前一行的ContactID值。 当然,在现实生活中,使用持久化的字段变量比不断调用 .我想另一种可能是使用CloneCursor方法来获得一个查找游标来访问 "先前 "行,但我自己还没有尝试过,而且无论如何也不可能(CloneCuror副本中的计算字段会发生什么?SetTempState

CDS2.Data := CDS1.Data;

© www.soinside.com 2019 - 2024. All rights reserved.