私は2つのテーブルを持っています:
OutputPackages (マスター)
|PackageID|
OutputItems (詳細)
|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 の Absolute Database を使用しています。
これを正しく挿入するにはどうすればよいですか?
アップデート
わかりました。データベースで主キーの制約を削除しましたが、何らかの理由で、OutputItems テーブルの自動インクリメント機能が期待どおりに機能していないことがわかりました。上記のコードを実行した後の OutputItems テーブルは次のようになります。
ItemID|PackageID|
1 |1 |
1 |1 |
2 |2 |
2 |2 |
すべての ItemID 値が一意ではない理由はまだわかりません....何かアイデアはありますか?