主 - Embarcadero C++生成器 10.2 中的详细信息数据集



我使用 DBNagivator 浏览一个主数据集,该数据集被分配为主数据源,用于许多详细数据集。问题是在详细数据集中引用了外键,这些外键链接回主数据集。当通过DBNavigator按钮创建新记录时,发布时发布的顺序与自然完全相反!它首先保存细节,而不是主,然后保存细节集。

我不确定如何在不修改数据库并删除所有外键引用的情况下解决此问题。即使我在详细信息表中调用 masterData->Post(( 在之前发布操作上也无济于事。

有没有办法解决这个问题?有没有办法让导航器先将更改应用于主节点,然后再向下传播?

谢谢!

您是否正在索引外键?如果没有,我相信添加索引将解决您的问题。看这里: https://www.sqlshack.com/index-foreign-key-columns-sql-server/

编辑以添加:由于外键已编制索引,因此请尝试使用事件处理程序来制作详细视图。这是通过创建主表的克隆游标来实现的。如果这不起作用,请尝试隐藏详细信息视图并仅显示主表,除非您出于某种原因特别需要详细视图?然后只使用键进行查找?对不起,我没有其他想法!

procedure TForm1.FormCreate(Sender: TObject);
begin
if not FileExists(ClientDataSet1.FileName) then
begin
  ShowMessage('Cannot find ' + ClientDataSet1.FileName +
    '. Please assign the items.cds table ' +
    'to the FileName property of ClientDataSet1 ' +
    'before attempting to run the application again');
    Halt;
end;
ClientDataSet1.Open;
//Assign the OnDataChange event handler _after_
//opening the ClientDataSet
DataSource1.OnDataChange := DataSource1DataChange;
//Clone the detail cursor.
ClientDataSet2.CloneCursor(ClientDataSet1, True);
//Create and assign an index to the cloned cursor
ClientDataSet2.AddIndex('PartIndex','PartNo',[]);
ClientDataSet2.IndexName := 'PartIndex';
ClientDataSet2.Filtered := True;
//Invoke the OnDataChange event handler to
//create the detail view
DataSource1DataChange(Self, PartFld);
end;

相关内容

最新更新