gpt4 book ai didi

delphi - 在主/明细关系上使用DataSet和Table之间的区别?

转载 作者:行者123 更新时间:2023-12-03 18:40:15 25 4
gpt4 key购买 nike

结果是否相同?因为我尝试过并且除了DataSet之外没有其他变化,所以我可以编写查询/命令,而在Table上我只能选择表。

最佳答案

我试过了,除了在DataSet中,我什么都看不到,我可以写一个
在表上查询/命令时,我只能选择表。


您的观察结果大体上是正确的,因为您需要知道特定表类型是否支持在主从关系的“详细信息”侧使用,如果支持,则如何配置它。

德尔福有像表一样的后代
数据库类型,例如用于(过时的)BDE的TTable,用于ADO的TADOTable等。它们是否支持位于主详细信息的“详细信息”侧
关系取决于特定表类型的作者,因此
获取给定的Table类型以处理Detail数据集行为所需执行的操作。

如果使用的是TADOQuery,则以Delphi提供的ADO组件为例。
作为Detail数据集,您为其编写SQL以包含WHERE子句,该子句链接
将数据集发送给Master,如

`where masterid = :masterid`


adnd将其 DataSource属性设置为连接到Master表的数据源。

要将TADODataSet用作详细信息,存在一个问题,您只能(轻松)设置
(详细)表名,而不是从中检索哪些记录以匹配主行。
TADOTable的作者选择解决此问题的方法是


给出用于的 TADOTable MasterFieldsMasterSource属性
将ADOTable链接到主数据集
将基础 Filter对象的 RecordSet属性用于过滤器表达式
过滤掉所有匹配的明细记录。请参见ADODB.Pas中的 procedure TCustomADODataSet.ActivateTextFilter


示例项目:

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
qMaster: TADOQuery;
qDetail: TADOQuery;
dsMaster: TDataSource;
tDetail: TADOTable;
procedure FormCreate(Sender: TObject);
public
end;

[...]

procedure TForm1.FormCreate(Sender: TObject);
begin
qMaster.Connection := AdoConnection1;
qMaster.SQL.Text := 'select * from master';

qDetail.Connection := AdoConnection1;
qDetail.SQL.Text := 'select * from detail where masterid = :masterid';
qDetail.DataSource := dsMaster;

// tDetail is a TADOTable
tDetail.Connection := AdoConnection1;
tDetail.TableName := 'detail';
tDetail.MasterSource := dsMaster;
tDetail.MasterFields := 'MasterID';


qMaster.Open;
qDetail.Open;
tDetail.Open;

end;

关于delphi - 在主/明细关系上使用DataSet和Table之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44040226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com