【问题标题】:Delphi DBGrid not showing dataDelphi DBGrid 不显示数据
【发布时间】:2014-03-26 14:21:10
【问题描述】:

我有一个带有 TFDConnection、TFDQuery、TDataSource 和 TDBGrid 的 delphi 表单。我想显示我的查询获得的数据(从 table_1 中选择 *)并将其放入我的 DBGrid。 我已经在组件之间建立了所有连接,但是在我启动我的 DBGrid 中的查询(返回 12 行)后,显示了 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 中。
  • 定义为可见的字段吗?我想您可以设置所有内容,然后将字段定义为不可见。
  • 如果您在选择语句中明确放弃所需的字段而不是使用 'select *' 会发生什么?
  • @KenWhite -> 问题是我必须在运行时而不是设计时填写连接参数,这就是为什么我无法在设计时对其进行测试。
  • @No'amNewman -> 如果我理解正确,您的意思是某处发生的事情使我的字段不可见 - 经过测试,它显示我的所有字段都是可见的,所以这不是我的问题所在.

标签: delphi dbgrid firedac


【解决方案1】:

你可以试试这个:

在表单的 OnShow 代码中明确激活您的 TFDQuery。像这样,

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

它对我有用,希望对我有帮助。

【讨论】:

  • 将一个控件关联到另一个控件的 DataControls 可能会在运行时丢失它们的设置。
  • 我提供的解决方案对我有用。否则很难找到。或许您可以为这个特定任务重新尝试一个新项目,我希望重试不会花费太多时间。
【解决方案2】:

如果 DBGrid 的 DefaultDrawing 属性设置为 False,您将看到 DBGrid 中的行数正确,但网格的单元格为空。如果您的 DBGrid 是这种情况,显然只需将 DefaultDrawing 设置为 True

【讨论】:

  • +1。这也是我能想象这种行为的唯一原因。但是你意识到这个问题已经有一年多了,对吧? xD 我的意思是,您的答案可能不会被接受。
  • @GabrielF:谢谢,感谢 +1。今晚早些时候发布的另一个答案引起了我的注意。我发布我的并不是希望它被接受,只是为了对 OP 似乎得到的行为提出一个更合理的解释。 Otoh,我知道他不到 7 小时前就在这里,所以大概很快就能说这是否是原因。
【解决方案3】:

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

datasource.dataset := Query

问题就解决了。

【讨论】:

  • 如果 DataSource 的 DataSet 属性已经设置为 Query 组件(从 OP 的描述中可能是这样),这不会有任何区别。
【解决方案4】:

我知道这个话题很老,但也许它可以帮助某人。就我而言,解决方案是:删除在设计时创建的所有 DBGrid 列,或者将列的 (TColumn) FieldName 属性与 EXACT 字段名称匹配,因为它们在数据库表中命名。

【讨论】:

    【解决方案5】:

    对于遇到此问题的其他人,解决方法如下:确保网格控件中的列名(而不是标题)与查询中的字段名匹配。一旦它们匹配,它们应该会正常运行。

    【讨论】:

    • 这是不正确的。网格列没有 Name 属性。正确答案是 FieldName 属性必须匹配数据集的 FieldNames 之一。 @tdiop 的答案提到了这一点,所以这个答案没有添加任何内容
    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多