Database Delphi中的多对多关系连接

Database Delphi中的多对多关系连接,database,delphi,Database,Delphi,如何在Delphi中建立多对多(主-主)关系,我找不到示例。只有DBlookup和master细节我能理解 就像一个产品可以属于一个或多个类别。像这样的表格结构: 产品表 ProductId,产品名称 分类表 CategoryId,CategoryName 关系表 ProductId,CategoryId 理想情况下,如果在产品网格中选择记录,则在屏幕右侧开始编辑详细记录中的产品。在这里,您可以编辑产品属性,理想情况下,您可以通过复选框在复选框组/网格中选择一个或多个类别 如何将其与TQuery

如何在Delphi中建立多对多(主-主)关系,我找不到示例。只有DBlookup和master细节我能理解

就像一个产品可以属于一个或多个类别。像这样的表格结构:

产品表

ProductId,产品名称

分类表

CategoryId,CategoryName

关系表

ProductId,CategoryId

理想情况下,如果在产品网格中选择记录,则在屏幕右侧开始编辑详细记录中的产品。在这里,您可以编辑产品属性,理想情况下,您可以通过复选框在复选框组/网格中选择一个或多个类别

如何将其与TQuery组件的表连接起来?有办法吗

希望你能帮忙

真诚的爱德华

还有一些解释:

目标如下:


通过使用对关系表和类别表的联合查询(类似于此示例),可以将其转换为简单的主-明细关系:

如果您想要一个所有类别的列表,其中一个单独的字段指示是否存在与产品的关系,您可以使用如下查询(例如,对于MSSQL,新字段名为Checked):


请注意,当您自己操作检查列表时,您必须编写代码来添加或删除关系记录。

您的意思是要在没有任何代码的情况下执行此操作??仅在可能的情况下使用对象检查器属性。这不是必需的。如果不是必需的,您可以使用具有所有类别的查找列的详细信息网格来执行此操作,也可以使用此查找将新记录添加到关系表中。如果您需要更多详细信息,请告诉我,我将对其进行编码并将其发送到此处作为答复。问题在于,它只返回产品上的类别。我需要显示所有类别。我将进一步阐述我的问题,我认为你是对的。我认为没有办法添加一些编码。谢谢我有点惊讶,RichDelphi工具箱中没有一个组件可以解决这样的问题。
master [product grid list]    Detail [on selected product]
                              property **A**
                              property **B**
                              property **C**
                              property **D**
                              property **Category collection**
                                       Category 1 - checked
                                       Category 2 - unchecked
                                       Category 3 - unchecked
                                       Category 4 - checked
SELECT * FROM Relation a
JOIN Category b on a.CategoryId = b.CategoryId
WHERE ProductId = :ProductId
SELECT c.*, CASE WHEN r.CategoryId IS NULL THEN 0 ELSE 1 END AS Checked
FROM CATEGORY
LEFT JOIN Relation r ON (c.CategoryId = r.CategoryId) AND (r.ProductId = :ProductId)
ORDER BY c.CategoryId