繁体   English   中英

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

[英]Master - Detail dataset in Embarcadero C++ Builder 10.2

我使用DBNagivator浏览主数据集,该主数据集被指定为许多详细数据集的主数据源。 问题在于,有详细数据集引用的外键链接回主数据集。 通过DBNavigator按钮创建新记录时,发布顺序与自然相反。 它先保存明细,而不是主明细,然后再保存明细集。

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

有什么办法解决这个问题? 有没有办法使导航器首先将更改应用到母版,然后向下传播?

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM