3

我在存储压力的数据库表中有一个列。压力始终存储为 PSI,可以通过潜水 14.5 转换为 BAR。

用户可以使用无线电组切换 PSI/BAR 的显示。

我正在使用 aTStringGrid并且正在转换为 a TDbGrid- 这对我来说很新。

当用户切换 PSI/BAR 时,如何更新我的数据库网格中的显示?(我想我只是再次执行它的查询?或调用query.Refresh()?)但是我该如何进行转换?

  1. 可能是一个存储过程,虽然这看起来有点矫枉过正,存储过程对我来说也是新的......
  2. 通过更改SELECT我的查询语句?但我该怎么做呢?SELECT pressure / 14.5 FROM measurements? 或者怎么做?
  3. 或者有没有OnBeforeXXX()我可以编码的?或者OnGetDisplayText()类似的?

我确信这是非常基本的,但直到现在我一直在显示未经处理的数据,现在我需要一个转换函数。谷歌没有帮助,但我可能不知道该要求什么。

我还想更改列标题的文本,在“压力 (PSI)”和“压力 (BAR)”之间切换。提前感谢您的帮助。

4

2 回答 2

3

为压力字段编写一个 OnGetText 事件处理程序,如下所示:

type
  TPressureMU = (pmuPSI, pmuBAR);

const
  PSIToBarFactor = 1/14.5;


procedure TdmData.qMeasurementsPressureGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  case PressureMU of
    pmuPSI: Text := FloatToStr(Sender.AsFloat); //Already PSI
    pmuBAR: Text := FloatToStr(Sender.AsFloat * PSIToBarFactor); //ConvertingToBAR
  end
end;

我正在使用声明的枚举的属性 PressureMU 来控制压力是否以 PSI 或 BAR 测量单位显示。

这样,当用户更改选择时,您只需调整该属性的值。

如果您使用持久性字段,您可以使用对象检查器将事件处理程序直接链接到您的字段,如果没有,您可以通过如下代码执行此操作:

begin
  qMeasurements.FieldByName('Pressure').OnGetText := qMeasurementsPressureGetText;
end;

qMeasurementsPressureGetText方法的名称在哪里。

于 2012-11-20T04:02:49.837 回答
2

创建持久字段(右键单击查询,然后选择Add Fields在设计时创建存储在 .dfm 中的字段)。右键单击查询,然后添加一个新字段。将其设为计算字段,并在OnCalcFields查询时将 PSI 转换为 BAR。

现在,当用户切换显示时,您只需通过设置来显示PSIBAR列,将其Column.FieldName设置为实际PSI列或新计算的BAR列。

当然,如果您不使用持久字段,则可以在查询中完成所有操作。只需在 SQL 语句中添加一个包含转换结果的新列,您仍然可以Column.FieldName在运行时更改以切换正在显示的值。

于 2012-11-20T03:52:20.430 回答