J'ai deux tables:Comment insérer des enregistrements dans une relation maître/détail
OutputPackages (maître)
|PackageID|
OutputItems (détail)
|ItemID|PackageID|
OutputItems a un indice appelé « idxPackage 'défini sur la colonne PackageID. ItemID est réglé sur l'incrémentation automatique.
Voici le code que je utilise pour insérer maîtres/détails dans ces tableaux:
//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;
Cela fonctionne bien aussi longtemps que je ne plaisante pas avec les propriétés MasterSource/MasterFields dans l'EDI. Mais une fois que je l'ai défini, et que j'exécute ce code, j'obtiens une erreur qui indique que j'ai une clé primaire en double 'ItemID'.
Je ne suis pas sûr de ce qui se passe - c'est ma première incursion dans master/detail, donc quelque chose peut être mal configuré. J'utilise la base de données absolue de ComponentAce pour ce projet.
Comment puis-je l'insérer correctement?
Mise à jour
Ok, je l'ai enlevé la clé primaire retenue dans ma db, et je vois que pour une raison quelconque, la fonction d'auto-incrémentation de la table OutputItems ne fonctionne pas comme je m'y attendais. Voici comment la table OutputItems semble après avoir exécuté le code ci-dessus:
ItemID|PackageID|
1 |1 |
1 |1 |
2 |2 |
2 |2 |
Je ne vois toujours pas pourquoi toutes les valeurs Itemid ne sont pas uniques .... Des idées?
Quelle ligne de votre routine provoque cette exception? De même, comment les propriétés MasterSource/MasterFields sont-elles configurées dans l'EDI? –
J'ai modifié le code pour montrer où se trouvait l'exception. Dans l'EDI: tblOutputItems.MasterSource = dsOutputPackages tblOutputItems.IndexName = idxPackage tblOutputItems.MasterFields = ID du paquet – croceldon