我有一个“项目”,它被分配到多个“类别”的数据库。分类可以有多个项目,反之亦然。数据库结构的相关部分如下:AutoID字段在多对多,插入使用TDataSet /查询(Delphi/MSAccess)
[tblItem]
的ItemID(自动编号)
的mainText(文本)
[tblCategory]
类别ID(自动编号)
名称(Text)
[tblItemCategory]
项目ID(长整型)
类别ID(长整型)
我想建立一个面板组件,它显示了一个类别名称在顶部,与属于低于电网项目的数据绑定网格。这个面板组件会有很多实例,最终用户应该能够创建一个新的项目,并同时将它分配给任何一个有问题的类别。
在MS Access中,可以创建一个嵌套表单,用“子”一个数据绑定到一个查询,该查询是链接到“父”表单上的数据绑定“类别”字段的“MasterFields”,例如网格项目更改为类别字段更改。此项目网格还可以轻松地添加新记录,同时自动填充ItemID(在tblItem和表tblItemCategory中)和链接的CategoryID字段(在tbIItemCategory中)。
对于访问形式的网格中的查询是:
SELECT tblItemCategory.CategoryID,tblItem *
FROM tblItemCategory LEFT JOIN tblItem ON tblItemCategory.ItemID = tblItem.ItemID
ORDER BY tblItemCategory.CategoryID。
如果我尝试在德尔福同样的事情,该项目ID自动编号字段没有得到填充,导致出现以下错误:
..exception类EOleException与消息“字段‘tblItemCategory.ItemID’不能包含一个Null值,因为该字段的Required属性设置为True。在此字段中输入一个值'。
..并且ItemID字段在网格中相应为空白。
有没有办法让Delphi/ADO像Access一样轻松/整洁地处理幕后两张ItemID群体,而无需手动处理它?如果不是,以编程方式处理它的最好/最优雅的方式是什么?
我想尽可能保留与传统TDataSet/TDataSource方法紧密结合的任何解决方案,因为我使用多种不同类型的数据绑定控件,所有这些控件都必须处理此问题相同的数据结构。
(注:我使用的是2007年德尔福和MSACCESS 2000格式MDB文件)
表格之间的关系对我而言并不明确,您是否可以添加一些信息(模式...) – philnext
我熟悉您所描述的Access功能,但我不太明白您想要实现的功能。你是否想要自动填充tblItemCategory中的两个关键列?如果表中没有其他字段,那么目的是什么? Plus:在哪里以及如何选择第二个关键列的值?如果你只是试图自动填充类别ID列(因为你已经加入了项目),@托尼的答案完全符合要点,我不理解你对他的回答的评论。 –