gpt4 book ai didi

mysql - 使用带有自动递增链接的嵌套 ClientDataSet 插入记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:14:14 24 4
gpt4 key购买 nike

我正在使用 MySQL 数据库自学 Delphi 数据库编程。我正在尝试从嵌套的 ClientDataSet 添加一条记录,其中包含主表和详细表之间的链接以及主表中的自动增量字段。我在以下位置找到了似乎可以回答我的问题的问题/答案对:Inserting records with autoincrementing primary keys

我不明白的是在查询 中设置必需的标志。由于我太缺乏经验,我不知道该怎么做,也不明白为什么有必要这样做。

与上面链接的问题类似,我有一个

(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 从该查询中学习架构,字段 TLNo 是 MySQL 主表和明细表中的必填字段。第三行代码是我对 Uwe Raabe 先生所说要做的事情的“解释”。显然我做错了。有人可以提供一个代码示例,以便这个 Delphi noob 不会误解指令吗?提前致谢。

最佳答案

对于您描述的错误,我能想到的唯一原因是当您执行第三行时 MasterSDS 未打开。当表中不存在该字段或数据集(即本例中的查询)未打开且未定义静态字段时,将引发“未找到字段”。

这引出了我想提的另一点:将 RequiredProviderFlags 设置放在相应数据集的 AfterOpen 事件中。每次追加记录时都无需重复这些设置。如果您使用静态字段,您甚至可以在对象检查器中进行这些设置。

作为初学者,我建议您始终使用可在 IDE 中调整的静态字段。这将大大简化事情。

关于mysql - 使用带有自动递增链接的嵌套 ClientDataSet 插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621014/

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