加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:34:30 所属栏目:大数据 来源:网络整理
导读:我在表单上有两个DB网格,一个有垂直滚动条而另一个没有,即使DataSource查询返回的结果多于Grid的可见行. 为什么TDBGrid上的垂直滚动条没有显示? [更新] Delphi XE2启动程序,使用AnyDac. 当我第一次启动程序时,DB网格确实有一个垂直滚动条,但后来它消失了,我
我在表单上有两个DB网格,一个有垂直滚动条而另一个没有,即使DataSource查询返回的结果多于Grid的可见行.

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

[更新] Delphi XE2启动程序,使用AnyDac.

当我第一次启动程序时,DB网格确实有一个垂直滚动条,但后来它消失了,我缩小了它,但仍然无法理解如何纠正问题.

我有两个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,LPAD(EXTRACT(SECOND FROM timediff(end_time_stamp,'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

如您所见,测量表中引用了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网格的垂直滚动条消失了.

因此,不知何故,一个DB网格/数据集/表正在影响otherDB网格.

实际的MySql数据库中的数据很好.
无论我是使用命令INSERT INTO还是两个已解决的查询(在设计时修复了SQL并且从未更改过),或者我使用@kobik建议到dataset.append,都会出现问题.

数据库内容很好,DB内容正确,当我点击摘要test_runs DB网格时,详细测量DB网格的内容被正确更新.

唯一的问题是在test_runs查询的表中插入一行导致滚动条从测量DB网格的DB网格中消失.

当我发表评论时,我可以单击test_runs数据库网格并在没有滚动条转换的情况下在测试运行之间进行交换,但是永远无法返回到当前测试,因为在数据库网格中没有它的条目.

当我第一次启动一个新的测试数据集时,当然,返回零 – 这可能导致滚动条消失?

但是,当进行测量时(每隔一秒,基于计时器),我已经检查过,并且dataset.RecordCount`的值递增,所以这里应该是第二次测量后的滚动条?或者,一旦控件确定不需要它,我是否必须强制它出现? (使DB网格无效并未导致丢失的滚动条出现)

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

我删除了数据库(我的代码在第一次运行时自动重新创建).首先,DB网格都没有垂直滚动条,因为它们都是空的.当我添加第一个测试时,“摘要”DB网格没有滚动条,因为它只有1个条目,“详细信息”DB网格在0处没有滚动条,条目和滚动条在第2组测量中出现.

我添加了第二次测试运行,“sumamry”DB网格有一个滚动条,因为它现在有两个条目,但是一旦我将第二个条目添加到摘要,滚动条就从“详细信息”数据库网格中消失了(无论有多少条目,它都没有做到(无论它有多少条目(我断点,因为每组测量都被添加并检查measuredQuery.RecordCount并看到它变为0,1,2 ……)

值得指出的是,这只发生在我添加新的测试运行时(第一次除外)).如果我启动程序,两个DB网格都有预期的滚动条(> 1个条目).我可以点击或鼠标滚动摘要,以显示相应测试运行的详细信息.滚动条永远不会消失 – 直到我添加一个新的测试运行,它将一行插入到摘要数据库网格中.

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

解决方法

阅读完您的评论并查看编辑问题后,我非常确定TDBGrid的“详细信息”DataSet在您的INSERT之后返回一条记录.这解释了为什么没有垂直滚动条 – 只有当记录>时,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.

对于过滤的DataSet也可能是这样.因此,您可能希望实现QC中建议的一种解决方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读