我有两张桌子:
输出包(主)
|PackageID|
输出项目(详细)
|ItemID|PackageID|
OutputItems 在 PackageID 列上设置了一个名为“idxPackage”的索引。ItemID 设置为自动递增。
这是我用来将主数据/详细信息插入这些表的代码:
//fill packages table
for i := 1 to 10 do
begin
Package := TfPackage(dlgSummary.fcPackageForms.Forms[i]);
if Package.PackageLoaded then
begin
with tblOutputPackages do
begin
Insert;
FieldByName('PackageID').AsInteger := Package.ourNum;
FieldByName('Description').AsString := Package.Title;
FieldByName('Total').AsCurrency := Package.Total;
Post;
end;
//fill items table
for ii := 1 to 10 do
begin
Item := TfPackagedItemEdit(Package.fc.Forms[ii]);
if Item.Activated then
begin
with tblOutputItems do
begin
Append;
FieldByName('PackageID').AsInteger := Package.ourNum;
FieldByName('Description').AsString := Item.Description;
FieldByName('Comment').AsString := Item.Comment;
FieldByName('Price').AsCurrency := Item.Price;
Post; //this causes the primary key exception
end;
end;
end;
end;
只要我不弄乱 IDE 中的 MasterSource/MasterFields 属性,它就可以正常工作。但是一旦我设置它并运行此代码,我就会收到一个错误,提示我有一个重复的主键“ItemID”。
我不确定发生了什么 - 这是我第一次涉足主/细节,所以可能设置错误。我正在为这个项目使用 ComponentAce 的绝对数据库。
我怎样才能让它正确插入?
更新
好的,我删除了我的数据库中的主键限制,我看到由于某种原因,OutputItems 表的自动增量功能没有像我预期的那样工作。以下是运行上述代码后 OutputItems 表的外观:
ItemID|PackageID|
1 |1 |
1 |1 |
2 |2 |
2 |2 |
我仍然不明白为什么所有 ItemID 值都不是唯一的......有什么想法吗?