我正在使用 MySQL 数据库自学 Delphi 数据库编程。我正在尝试从嵌套的 ClientDataSet 添加一条记录,其中包含主表和详细表之间的链接以及主表中的自动增量字段。我在以下位置找到了一个似乎可以回答我的问题的问题/答案对:使用自动递增主键插入记录
我不明白的是在Query中设置 required 标志。我无法弄清楚如何做到这一点,因为我太缺乏经验,也不明白为什么有必要。
与上面链接的问题类似,我有一个
(SQLConnection->TSQLDataSet->DataSetProvider->ClientDataSet using dbexpress.
| |->LinkDataSource
->TSQLDataSet2->LinkDataSource
我很好地将数据加载到我的嵌套 ClientDataSet 中,因此创建嵌套结构的组件链接工作。将主/明细表加载到嵌套数据集中后,以下代码会出错。
MasterCDS1.Append;
MasterCDS1.FieldByName('TLNo').Required := False;
MasterSDS.FieldByName('TLNo').Required := False; { Error: Field 'TLNo' not found }
MasterCDS1.FieldByName('TLNo').ProviderFlags := [pfInWhere, pfInKey];
{ ... Populate Master table Fields}
MasterCDS1.Post;
MasterCDS1.ApplyUpdates(0);
TLNo 是链接表的字段,是主表的部分主键,也是明细表的部分主键。我尝试设置 TSQLDataSet 的第三行生成注释中显示的错误。MasterSDS 是我放置“Select * from master”查询的地方。MasterCDS 从该查询中学习 Schema,并且字段 TLNo 是 MySQL 主表和详细表中的必填字段。第三行代码是我对 Uwe Raabe 先生所说的“解释”。显然我做错了。有人可以提供一个代码示例,以便这个 Delphi noob 不会误解说明吗?提前致谢。