gpt4 book ai didi

delphi - 如何在显示之前操作数据库网格的内容?

转载 作者:行者123 更新时间:2023-12-03 15:50:32 25 4
gpt4 key购买 nike

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

用户可以使用 radio 组切换 PSI/BAR 的显示。

我正在使用 TStringGrid 并正在转换为 TDbGrid - 这对我来说相当新。

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

  1. 可能是一个存储过程,尽管这看起来有点矫枉过正,而且存储过程对我来说也是新的......
  2. 通过更改查询的 SELECT 语句?但我该怎么做呢? 从测量中选择压力/14.5?或者如何?
  3. 或者我可以编写一个 OnBeforeXXX() 吗?或者 OnGetDisplayText() 或类似的东西?

我确信这是非常基本的,但到目前为止我只是显示未操作的数据,现在我需要一个转换函数。 Google 没有提供帮助,但我可能不知道该要求什么。

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

最佳答案

为压力场编写一个 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 是方法的名称。

关于delphi - 如何在显示之前操作数据库网格的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com