我有一個「項目」,它被分配到多個「類別」的數據庫。分類可以有多個項目,反之亦然。數據庫結構的相關部分如下: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列(因爲你已經加入了項目),@託尼的答案完全符合要點,我不理解你對他的回答的評論。 –