delphi使用dbgrid查看详细信息页面上的记录

时间:2014-10-23 14:35:27

标签: delphi dbgrid

我有一个带有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,数据集提供程序,客户端数据集,数据源设置,如果这有助于任何。

1 个答案:

答案 0 :(得分:0)

这是一个非常疯狂的问题,但我怀疑以下内容:

  • 您可以将公共变量用于IDE自动添加到每个单元的表单。
  • 您可以按照FRM_ADMIN的方式创建frm_LEADDETAILADMINLEAD,例如:

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

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

解决方案和建议:

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

进一步阅读: