gpt4 book ai didi

delphi - 为什么未显示TDBGrid上的垂直滚动条?

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

我在窗体上有两个数据库网格,一个具有垂直滚动条,而另一个则没有,即使DataSource查询返回的结果多于网格的可见行。

为什么TDBGrid上的垂直滚动条没有显示?

[更新]使用AnyDac的Delphi XE2启动器。

当我第一次启动程序时,DB网格确实具有垂直滚动条,但是后来消失了,我已经缩小了范围,但是仍然无法理解如何解决该问题。

我有两个MySql表和两个DBgrids。一个是所有测试运行的概述,另一个是在测试运行期间进行的测量的详细信息。当用户单击“摘要”网格的一行时,我将更新“详细信息”网格的查询参数。这有效,并且不会删除滚动条。

当我开始运行新的Tets并将新行插入“摘要”表中时,问题就来了-“详细信息” 表的滚动条消失了!

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

mysql> describe measurements;
+------------------------+-----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------+------+-----+-------------------+-------+
| run_id | int(11) | NO | MUL | NULL | |
| measurement_time_stamp | timestamp | NO | | CURRENT_TIMESTAMP | |
| ph | float | NO | | NULL | |
| conductivity | float | NO | | NULL | |
| cod | float | NO | | NULL | |
+------------------------+-----------+------+-----+-------------------+-------+
5 rows in set (0.04 sec)

mysql>

AnyDac查询分别是
SELECT 
run_id,
start_time_stamp,
end_time_stamp,
CONCAT(CONCAT(CONCAT(CONCAT(LPAD(EXTRACT(HOUR FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"),LPAD(EXTRACT(MINUTE FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"), LPAD(EXTRACT(SECOND FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'))) AS duration,
description
FROM
test_runs
ORDER BY
start_time_stamp
DESC


SELECT 
run_id,
measurement_time_stamp,
ROUND(ph, :float_precision) as ph,
ROUND(conductivity, :float_precision) as conductivity,
ROUND(cod, :float_precision) as cod
FROM
measurements
WHERE
run_id=:run_id
ORDER BY
measurement_time_stamp
DESC

如您所见, measurements表中存在对 test_runs表的引用

当我执行以下SQL时,测量表的滚动条消失了:
INSERT INTO 
test_runs (start_time_stamp, description)
VALUES
(CURRENT_TIMESTAMP, "<Currently running test>");

SELECT LAST_INSERT_ID() AS run_id

能告诉我我做错了什么吗?谢谢0x000F4240

[更新]再次出现问题,当我在 test_runs表中添加一行时,反射(reflect) measurements表查询的数据库网格的垂直滚动条消失了。

因此,以某种方式,一个数据库网格/数据集/表正在影响另一个数据库网格。

实际的MySql数据库中的数据很好。
无论我是否使用命令 INSERT INTO和两个十进制查询(在设计时固定SQL,并且从未更改过),或者是否对 dataset.append使用@kobik建议,都会出现问题。

数据库内容正常,数据库内容正确,当我单击 test_runs数据库摘要网格时,详细信息 measurements DB网格的内容已正确更新。

唯一的问题是,在 test_runs查询表中插入一行会导致滚动条从 measurements DB网格的DB网格中消失。

当我对此发表评论时,我可以单击 test_runs数据库网格并在测试运行 之间进行交换,而无需滚动条破坏,但是永远无法返回到当前测试,因为在数据库网格中没有此项。

当我第一次启动新测试 dataset时,RecordCount`当然为零-这可能会导致滚动条消失吗?

但是,在进行测量时(每隔一秒,基于计时器),我已经检查了 dataset .RecordCount`的值是否递增,因此在第二次测量后应该成为滚动条吗?还是一旦控件确定不需要它时,我是否必须强制它出现? (使数据库网格无效不会导致缺少的滚动条出现)

[更新]
正如@kobik所建议的那样,我已将run_id设置为 test_runs表上的主自动增量键,并使其成为 measurements表上的索引。我已经更新了上面给出的表格详细信息。我还将查询的 mastersource设置为将测试drun DB网格填充到测试运行“摘要” DB网格查询的数据源中。

我删除了数据库(我的代码自动在第一次运行时重新创建它)。最初,两个DB网格都没有垂直滚动条,因为它们都为空。当我添加第一个测试时,“摘要”数据库网格没有滚动条,因为它只有1个条目,所以“详细信息”数据库网格没有0的滚动条,并且条目和滚动条与第二组测量一起出现。

我添加了第二个测试运行,并且“sumamry”数据库网格具有滚动条,因为它现在有两个条目,但是一旦将第二个条目添加到摘要中,滚动条便从“详细信息” DB网格中消失了(该网格不管它有多少个条目,它 都不会执行),无论它有多少个条目(我在添加每组测量值时都设置了断点,并检查 measurementsQuery.RecordCount并查看它是否为0、1、2 ...)

值得指出的是,只有在添加新的测试运行时(第一个之外的 ),这种情况才会发生。如果启动该程序,则两个数据库网格都具有预期的滚动条(> 1个条目)。而且,我可以单击或单击摘要以使核心响应测试运行的详细信息令人失望。滚动条永远不会消失-直到我添加新的测试运行,然后在摘要DB网格中插入一行。

[更新]
请参阅https://stackoverflow.com/questions/15399769/why-is-the-vertical-scrollbar-on-a-tdbgrid-not-displayed-redux

最佳答案

阅读您的评论并查看您的编辑问题后,我很确定TDBGrid的“详细信息” DataSetINSERT之后返回了单个记录。这就解释了为什么没有垂直滚动条的原因-TDBGrid仅在记录> 1时才会显示垂直滚动条。

您可以通过检查链接到网格的DataSet.RecordCount进行简单的测试。它应该显示1

显然,在QC中存在一个已知问题: TDBGrid vertical scrollbar dissappears
它从D7..XE2一直到。 (甚至对于较旧/较新的版本)。

When you have a master/detail record, and the detail is shown using a TDBGrid, then the vertical scrollbar dissappear randomly, even if there are more records than will fit! You can see the right border outline of the scrollbar though, including the thumb thingy moving. It's as if the grid has resized slightly over the scrollbar.



对于过滤后的数据集也可能是这样。
因此,您可能想要实现QC中建议的解决方法之一。

关于delphi - 为什么未显示TDBGrid上的垂直滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220964/

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