【问题标题】:delphi using dbgrid to view a record on a detail pagedelphi 使用 dbgrid 查看详细页面上的记录
【发布时间】:2015-04-10 05:38:27
【问题描述】:

我有一个带有 dbgrid 的表单和另一个带有 dbedits 的表单。我的 dbgrid 表单有一个双击事件(下面的代码是事件)第二个表单上的 dbedits 有一个连接到第一个表单的 CDS 的数据源,当我编译并运行程序并使用 db grid 打开表单时我可以双击任何记录,它会显示在第二个表单的 dbedits 中,但是如果我关闭表单并重新打开表单,则将在第二个表单 dbedits 中显示的唯一记录是表中的第一条记录。我必须打开和关闭 CDS,但这不起作用。我还需要做什么来纠正这个问题。

procedure TFRM_ADMIN.DBGrid1DblClick(Sender: TObject);
BEGIN
  frm_LEADDETAILADMINLEAD := tfrm_LEADDETAILADMINLEAD.Create(FRM_ADMIN);
  frm_LEADDETAILADMINLEAD.SHOW;   
END;

该网站不允许我添加 dmf 文本。它太大了。我正在使用 sqlconnection、sqlquery、数据集提供程序、客户端数据集、数据源设置,如果这有帮助的话。

【问题讨论】:

  • 抱歉,我无法理解您所写的内容。您能否edit 使其更清楚,并可能包含一些代码来证明您遇到的问题?谢谢。
  • 唯一的代码是在打开详细信息表单的 dbgrid 双击事件中。当关闭详细信息表单和包含 dbgrid 的表单然后重新打开包含包含 dbgrid 的表单的表单并选择要查看的另一条记录但只有从网格加载的记录是第一个记录时,问题就开始了桌子。无论您是否单击最后一条记录,加载到详细信息的唯一记录都是表中的第一条记录。我希望这更清楚
  • 您显然在项目的某处遇到了状态错误。然而,也许您没有意识到有很多方法可以实现您的 dbgrid 和详细信息表单,因此这里的读者很难猜出您的错误可能是什么。我建议您添加到您的 q a) dbgrid dbl-click 事件中的代码和 b) 两种表单的 DFM 的文本版本。

标签: delphi dbgrid


【解决方案1】:

这是一个非常疯狂的问题,但我怀疑以下因素在起作用:

  • 您将公共变量用于 IDE 自动添加到每个单元的表单。
  • 您创建 FRM_ADMIN 的方式与创建 frm_LEADDETAILADMINLEAD 的方式类似:

    FRM_ADMIN := TFRM_ADMIN.Create(MainForm);
    FRM_ADMIN.Show;
    
  • 您不关闭此表单,而是将其隐藏(表单的默认关闭操作)。

  • 第二次创建第二个表单时,第二个表单的 DataSource 的设计时集 DataSet 属性会自动解析为第一个表单的第一个实例上的 ClientDataSet。
  • 因此,在第二次运行中,您正在编辑在第一次运行中选择的记录。

解决方案和建议:

  • OnClose 事件中销毁表单(设置Action := caFree)。
  • 不要使用公共变量,删除它们。将表单引用保存在单独的私有字段中,每个实例都是唯一的。
  • 在运行时显式分配 DataSource 和/或 DataSet 属性。
  • 使用数据模块。

进一步阅读:

【讨论】:

  • 我用按钮单击事件“关闭”关闭表单;正如您所怀疑的那样,我使用公共变量。在关闭两种表格期间,我将关闭 CDS。我完全不知道为什么会这样。我是Delphi新手,我有后台sql,这是我第一次尝试delphi。我不习惯打开和关闭 sql 和 cds。在我关闭并使用 dbgrid 重新打开表单之前,我对一切正常工作感到迷茫。
猜你喜欢
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多