Master - Embarcadero C ++ Builder 10.2中的Detail数据集

时间:2018-01-22 19:49:23

标签: c++ c++builder

我使用DBNagivator在主数据集中导航,该主数据集被指定为许多详细数据集的主数据源。问题是在链接回主数据集的详细数据集中引用了外键。通过DBNavigator按钮创建新记录时,发布帖子的顺序完全与自然相反!它首先保存细节而不是主细节集。

我不知道如何在不修改数据库和删除所有外键引用的情况下克服这个问题。即使我在详细信息表中调用masterData-> Post()onBeforePost操作也无济于事。

有什么方法可以解决这个问题吗?有没有办法让导航器首先将更改应用于master,然后向下传播?

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否正在索引外键?如果没有,我相信添加索引将解决您的问题。见这里: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;