gpt4 book ai didi

delphi - 如何在数据库网格中显示TIMEDIFF(现在,然后)?

转载 作者:行者123 更新时间:2023-12-03 15:18:26 28 4
gpt4 key购买 nike

抱歉,我对 DbGrids 还很陌生。

我是否应该使用查询的字段编辑器并以某种方式添加一个捕获 TIMEDIFF 的新字段,然后将其添加为我的 DbGrid 中的列?

或者我可以/应该跳过字段编辑器并以某种方式将 TIMEDIFFF 声明为列吗?

对于这个表,我想要一个包含 4 列的 DbGrid:开始时间、结束时间、持续时间、描述(run_id 是主键,不会显示)。

我对如何将数据放入“持续时间”列感到困惑......

mysql> describe  test_runs;
+------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+----------------+
| run_id | int(11) | NO | PRI | NULL | auto_increment |
| start_time_stamp | timestamp | YES | | NULL | |
| end_time_stamp | timestamp | YES | | NULL | |
| description | varchar(64) | YES | | NULL | |
+------------------+-------------+------+-----+---------+----------------+
4 rows in set (0.37 sec)
<小时/>

[更新]数据源的查询是

SELECT start_time_stamp,
end_time_stamp,
TIMEDIFF(end_time_stamp, start_time_stamp) as duration,
description

FROM test_runs ORDER BY start_time_stamp DESC

当我在 MySql 中手动执行它时,我得到

mysql> select TIMEDIFF(end_time_stamp, start_time_stamp) as duration FROM
+----------+
| duration |
+----------+
| NULL |
| 00:04:43 |
| 00:00:13 |
| 00:00:06 |
| 00:00:04 |
+----------+
5 rows in set (0.00 sec)

但数据库网格中的相应列仍为空白。有人可以帮忙吗?谢谢。

<小时/>

[更新]我正在使用 AnyDac,如果有帮助的话。当我使用 AnYDac 查询编辑器并执行它时,查询会在 MySql 和 Delphi IDE 中生成所有字段,包括时间差。

唯一的问题是我在运行时在数据库网格中看不到它。我在设计时双击数据库网格,列是正确的。 FielName 属性设置为 duration,该属性由上面显示的查询重新调整。数据库中不存在,但是通过查询计算出来的;这可能是问题所在吗?

<小时/>

[Aaaaaaaargh!!!] 有人试图“改进”我的代码并在运行时以编程方式设置查询的文本(如 SELECT * FROM test_runs),从而覆盖我的设计时查询!由于数据库表没有duration字段,因此数据库网格中没有显示任何内容。

话已经说完了,声音也提高了,现在我必须为浪费你们的时间而道歉。抱歉。

最佳答案

我将在您的查询中创建一个计算字段并将该字段添加到您的 DbGrid。

所以,正如您所说,在打开字段编辑器进行查询的情况下,右键单击并选择“新建字段”(或按 Ctrl-N)。为您的新字段命名(例如持续时间),保留组件名称默认值或根据需要重命名。设置适当的类型(在本例中最有可能是日期时间)并将字段类型设置为计算。

然后,在查询的 OnCalcFields 事件中,将该字段的值设置为您想要的值。例如:

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
Dataset.FieldByName('description').AsDateTime :=
DataSet.FieldByName('end_time_stamp').AsDateTime -
DataSet.FieldByName('start_time_stamp').AsDateTime;
end;

或者,您还可以将持续时间作为额外字段包含在您的选择查询中。不幸的是我这里还没有现成的 MySQL 访问权限,但它可能是这样的:

select run_id, start_time_stamp, end_time_stamp, description, 
(end_time_stamp - start_time_stamp) as duration from test_runs;

关于delphi - 如何在数据库网格中显示TIMEDIFF(现在,然后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576369/

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