gpt4 book ai didi

delphi - 多对多中的 AutoID 字段,使用 TDataSet/Query (Delphi/MSAccess) 插入

转载 作者:行者123 更新时间:2023-12-03 18:50:52 26 4
gpt4 key购买 nike

我有一个“项目”数据库,它被分配给多个“类别”。类别可以有多个项目,反之亦然。数据库结构的相关部分如下:

[tblItem]
项目 ID(自动编号)
正文(文本)

[tbl类别]
类别 ID(自动编号)
名称(文字)

[tblItemCategory] ​​
ItemID(长整数)
CategoryID(长整数)

我想构建一个面板组件,它在顶部显示一个类别名称,下面有一个属于该网格的项目的数据绑定(bind)网格。这个面板组件会有很多实例,最终用户应该能够创建一个新项目,并同时从其中任何一个中将其分配给相关类别。

在 MS Access 中,可以创建一个嵌套表单,其中“子”一个数据绑定(bind)到一个查询,该查询是“MasterFields”链接到“父”表单上的数据绑定(bind)“类别”字段,这样项目的网格就会更改为类别字段已更改。这个 Items 网格还可以轻松地添加新记录,同时自动填充 ItemID(在 tblItem AND 表 tblItemCategory 中)和链接的 CategoryID 字段(在 tblItemCategory 中)。

该 Access 表单的网格的查询是:
选择 tblItemCategory.CategoryID,tblItem.*
从 tblItemCategory 左连接 tblItem ON tblItemCategory.ItemID = tblItem.ItemID
按 tblItemCategory.CategoryID 排序;

如果我在 Delphi 中尝试相同的操作,ItemID AutoNumber 字段不会被填充,从而导致以下错误:

..exception class EOleException with message 'The field 'tblItemCategory.ItemID' cannot contain Null 值,因为该字段的Required 属性设置为True。在此字段中输入一个值'。

..并且 ItemID 字段在网格中相应地为空白。

有没有办法让 Delphi/ADO 像 Access 一样轻松/整齐地处理幕后的两表 ItemID 填充,而无需以编程方式手动处理?如果不是,以编程方式处理它的最佳/最优雅的方式是什么?

我希望我最终得到的任何解决方案都尽可能与传统的 TDataSet/TDataSource 方法密切相关,因为我使用了许多不同类型的数据绑定(bind)控件,所有这些控件都必须处理相同的数据结构。

(注意:我使用的是 Delphi 2007 和 MSAccess 2000 格式的 MDB 文件。)

最佳答案

几乎相同的方式。 Theres 的主源和主字段属性,因此您只需将详细信息链接到主控。

所以 mastersource 将是 Customer、Detail Source、由 CustomerID 链接的 Orders。

很容易证明这一点,但很难解释。

不过,其他一些家伙把它全部写出来了。

Master Detail Forms And Delphi

关于delphi - 多对多中的 AutoID 字段,使用 TDataSet/Query (Delphi/MSAccess) 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274979/

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