【问题标题】:Inserting records with Nested ClientDataSet with autoincrementing link使用带有自动递增链接的嵌套 ClientDataSet 插入记录
【发布时间】:2013-05-18 05:26:50
【问题描述】:

我正在使用 MySQL 数据库自学 Delphi 数据库编程。我正在尝试从嵌套的 ClientDataSet 添加一条记录,其中包含主表和详细表之间的链接以及主表中的自动增量字段。我在Inserting records with autoincrementing primary keys

找到了一个似乎可以回答我的问题的问题/答案对

我不明白的是在 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 不会误解说明吗?提前致谢。

【问题讨论】:

  • 我不知道您的实际问题是什么。我看到一大堆文本和代码,然后“有人可以提供代码示例吗?提前致谢。”您能edit 减少无关信息并提出我们可以回答的问题吗?

标签: mysql database delphi


【解决方案1】:

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

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

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

【讨论】:

  • 先生。 Raabe,非常感谢您的回复。我尝试将语句移动到 AfterOpen 事件中并且它有效。我验证了 AfterOpen 事件在给出错误的行之前触发,所以我仍然不确定为什么它没有。我的 MasterCDS1.open 是触发 MasterSDS.AfterOpen 事件的原因,之后生成错误的代码。也许加载 CDS 后 MasterSDS 不会保持打开状态?无论如何,我现在已经成功地添加了我的第一个主/详细记录(即使我可能会以艰难的方式做事)。再次感谢。
  • SQLDataset 仅在 DataSetProvider 为 ClientDataSet 检索数据时处于活动状态。如果您没有使用 PacketRecords 属性限制一次传输的记录数,则在传输所有记录后关闭 SQLDataset。
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2014-02-25
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多