我在表单上有两个DB网格,一个有垂直滚动条,另一个没有,即使DataSource查询返回的结果多于Grid的可见行。
为什么TDBGrid
上的垂直滚动条没有显示?
[更新] Delphi XE2启动程序,使用AnyDac。
当我第一次启动程序时,数据库网格确实有一个垂直滚动条,但后来它消失了,我把它缩小了,但仍然无法理解如何纠正问题。
我有两个MySql表和两个DBgrids。一个是所有测试运行的概述,另一个是测试运行期间测量的详细信息。当用户单击“摘要”网格的一行时,我更新“详细信息”网格的查询参数。这有效,但不会删除滚动条。
当我开始新的tets运行并在“summary”表中插入新行时,问题出现了 - “details”表的滚动条消失了!
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
表添加一行时,DB网格的垂直滚动条反映了measurements
表的查询。 / p>
因此,不知何故,一个数据库网格/数据集/表正在影响其他数据库网格。
实际的MySql数据库中的数据很好。
无论我是使用命令INSERT INTO
还是两个已删除的查询(在设计时修复了SQL且从未更改过),或者我使用@kobik建议dataset.append
,都会出现问题。
数据库内容正常,数据库内容正确,当我点击摘要test_runs
数据库网格时,详细信息measurements
数据库网格的内容已正确更新。
唯一的问题是在test_runs
查询的表中插入一行会导致滚动条从measurements
数据库网格的数据库网格中消失。
当我对此进行评论时,我可以单击test_runs
数据库网格并在测试运行之间交换而不使用滚动条vanshing ,但是永远无法返回到当前测试,因为那里在数据库网格中没有它的条目。
当我第一次开始新的测试dataset
时,RecordCount`当然是零 - 这可能导致滚动条消失?
然而,当进行测量时(每隔一秒,基于计时器),我已经检查过dataset
。RecordCount`的值递增,所以这里应该是第二次测量后的滚动条?或者,一旦控件确定不需要它,我是否必须强制它出现? (使DB网格无效不会导致丢失的滚动条出现)
[更新]
正如@kobik所建议的那样,我使run_id成为test_runs
表上的主要自动增量键和measurements
表上的索引。我已经更新了上面给出的表格详细信息。我还设置了查询的mastersource
,它将测试drun DB网格填充到测试运行“summary”DB网格查询的数据源。
我删除了数据库(我的代码在第一次运行时自动重新创建)。首先,DB网格都没有垂直滚动条,因为它们都是空的。当我添加第一个测试时,“摘要”DB网格没有滚动条,因为它只有1个条目,“详细信息”DB网格在0处没有滚动条,条目和滚动条在第2组测量中出现。 / p>
我添加了第二次测试运行,“sumamry”DB网格有一个滚动条,因为它现在有两个条目,但是只要我将第二个条目添加到摘要,滚动条就会从“详细信息”数据库中消失网格(当单次测试运行时没有做),无论它有多少条目(我添加了每组测量的断点,并检查measurementsQuery.RecordCount
并查看它去0,1,2 ......)
值得指出的是,只有当我添加新的测试运行时才会发生这种情况(除了第一个之外)。如果我启动程序,两个DB网格都有预期的滚动条(> 1个条目)。我可以点击或鼠标滚动摘要,以显示相应测试运行的详细信息。滚动条永远不会消失 - 直到我添加一个新的测试运行,它会在摘要数据库网格中插入一行。
答案 0 :(得分:8)
在阅读您的评论并审核您的修改问题后,我非常确定TDBGrid
的“详细信息”DataSet
正在返回 单个 记录INSERT
之后的记录。这解释了为什么没有垂直滚动条 - TDBGrid
仅在记录&gt;时显示垂直滚动条。 1。
您可以通过检查链接到网格的DataSet.RecordCount
进行简单测试。它应该显示1
。
显然,在质量控制中存在已知问题:TDBGrid vertical scrollbar dissappears
。
它从D7..XE2开始。 (甚至可能适用于较旧/较新的版本)。
当您有主/详细记录时,使用a显示详细信息 TDBGrid,然后垂直滚动条随机消失,即使 有更多的记录比适合!你可以看到正确的边框 虽然滚动条的轮廓,包括拇指东西移动。 就像网格在滚动条上稍微调整一样。
对于过滤后的DataSet也可能如此 因此,您可能希望实现QC中建议的一种解决方法。
答案 1 :(得分:0)
我将滚动条设置为ssBoth。它是固定的