У меня есть две таблицы:
Пакеты вывода (мастер)
|PackageID|
OutputItems (подробно)
|ItemID|PackageID|
OutputItems имеет индекс idxPackage, установленный в столбце PackageID. 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;
Это работает нормально, если я не связываюсь со свойствами MasterSource / MasterFields в IDE. Но как только я установил его и запустил этот код, я получил сообщение об ошибке, в котором говорится, что у меня есть дубликат первичного ключа ItemID.
Я не уверен, что происходит - это мой первый набег на мастера / детали, поэтому что-то может быть неправильно настроено. Я использую Абсолютную базу данных ComponentAce для этого проекта.
Как мне заставить это вставить правильно?
Обновление
Хорошо, я удалил ограничение первичного ключа в моей базе данных и вижу, что по какой-то причине функция автоинкремента в таблице OutputItems работает не так, как я ожидал. Вот как выглядит таблица OutputItems после выполнения приведенного выше кода:
ItemID|PackageID|
1 |1 |
1 |1 |
2 |2 |
2 |2 |
Я до сих пор не понимаю, почему все значения ItemID не уникальны .... Есть идеи?