Delphi DBGrid没有显示数据。

3
我有一个Delphi窗体,其中包含TFDConnection、TFDQuery、TDataSource和TDBGrid。我想展示查询结果(select * from table_1)并将其放入我的DBGrid中。
我已经将所有组件连接起来,但是在我启动查询后(返回12行),我的DBGrid中显示的是12行空白。显然,我忘记了某些东西,阻止我在DBGrid中看到我的数据。你能帮助我看看我错过了什么吗?
步骤如下: 1. 将所有组件添加到窗体中。 2. 将FDQuery与FDConnection、TDataSource与FDQuery、DBGrid与TDataSource连接。 3. 连接参数测试成功(问题不在我的连接参数上)。 4. 在我的DBGrid中显示了行数(12行),但没有可见信息。 5. 如果我遍历我的FDQuery,我可以看到我需要的所有信息,但这并不能帮助我填充我的DBGrid。

应该可以工作。我只是重复了所有的步骤:创建了一个TFDConnection,连接到SQLite数据库,测试了连接,甚至在连接对话框的SQL选项卡中运行了一个测试查询。放置了一个TFDQuery,将连接设置为FDConnection1,将SQL设置为之前使用的测试查询。将FDConnection1.Connected设置为True,将FDQuery1.Active设置为True,放置了一个TDataSource,将DataSet设置为FDQuery1。放置了一个TDBGri,并将DBGrid1.DataSource设置为DataSource1,数据出现在DBGrid中。 - Ken White
字段是否定义为可见?我想你可以先设置好一切,然后将字段定义为不可见。 - No'am Newman
如果您在选择语句中明确放弃所需字段,而不是使用 "select *",会发生什么? - Copilot
@KenWhite -> 问题是我必须在运行时而不是设计时填写我的连接参数,这就是为什么我无法在设计时进行测试。 - Viktor Anastasov
@No'amNewman -> 如果我理解正确的话,你的意思是在某个地方发生了一些事情,导致我的字段变得不可见 - 经过测试,我发现所有的字段都是可见的,所以这不是我的问题所在。 - Viktor Anastasov
显示剩余3条评论
5个回答

3

您可以尝试这样做:

在您的窗体的OnShow代码中显式激活TFDQuery。像这样:

procedure TForm.FormShow(Sender: TObject);
begin
    FDQuery.Active:= True;
end;

这对我很有用,希望它能帮到你。


DataControls将一个控件与另一个控件关联起来,但在运行时可能会丢失其设置。 - A_R
我给出的解决方案对我来说有效。否则很难找到答案。也许你可以再试一次,用一个新项目来完成这个特定的任务,希望重新尝试不会花太多时间。 - A_R

1

要解决这个问题(我也遇到过同样的问题),在打开查询后,设置:

datasource.dataset := Query

而且问题将会得到解决。

如果DataSource的DataSet属性已经设置为查询组件(从OP的描述来看,可能已经设置了),这不会有任何影响。 - MartynA

1
如果DBGrid的DefaultDrawing属性设置为False,您将会看到在DBGrid中正确的行数,但是格子却为空。如果您的DBGrid是这种情况,只需将DefaultDrawing设置为True即可。请注意保留html标签。

+1。这也是我能想到的唯一原因。但你意识到这个问题已经超过一年了,对吗?xD 我的意思是,你可能不会被接受答案了。 - GabrielF
@GabrielF:谢谢,我很感激你的支持。我之所以注意到这个问题是因为今晚早些时候有人发布了另一个答案。我发表我的观点并不是希望被采纳,只是想提出一个更合理的解释,来解释楼主所遇到的行为。另一方面,我看到他在不到7小时前还在这里,所以很快就能知道是否是这个原因引起的。 - MartynA

1

我知道这个话题很老了,但也许可以帮助到某些人。在我的情况下,解决方案是:删除所有在设计时创建的DBGrid列,或者将列(TColumn)的FieldName属性与数据库表中的字段名称完全匹配。


-1
对于其他遇到这个问题的人,以下是解决方法:确保网格控件中的列名(而不是标题)与查询中的字段名匹配。一旦它们匹配,它们就应该正常工作。

1
这是不正确的。网格列没有Name属性。正确答案是FieldName属性必须与数据集的FieldNames之一相匹配。@tdiop的答案提到了这一点,所以这个答案没有添加任何内容。 - MartynA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接