[Gelöst]Tabelle mit Werten aus anderer Tabelel füllen

22. April 2010 10:50

Hallo,

ich muss eine Tabelle mit allen Werte einer Spalte einer anderen Tabelle füllen. Ich hätte es mit diesem Code versucht
Code:
lr_impLog.RESET;
lr_impLog.SETCURRENTKEY(Importnummer,Laufnummer);
lr_impLog.SETRANGE(Importnummer);
IF lr_impLog.FINDFIRST THEN
  BEGIN
     REPEAT
       lr_geldein."Import-Nr" := lr_impLog.Importnummer;
       lr_geldein.INSERT(FALSE);
     UNTIL lr_impLog.NEXT = 0;
  END;

Allerdings kommt dann immer die Fehlermeldung:
Die Geldeingang existiert bereits. Identifizierende Felder und Werte: Import-Nr='1'
Geldeingang ist die Tabelle die mit Werten gefüllt werden soll.
Was mache ich falsch?
Zuletzt geändert von Muenchner78 am 22. April 2010 11:25, insgesamt 2-mal geändert.

Re: Tabelle mit Werten aus anderer Tabelel füllen

22. April 2010 10:59

Ich vermute mal das dein impLog mehrere Datensätze enthällt bei dem die Importnummer 1 ist.
Der Primärschlüssel deiner Zieltabelle ist allerdings nur Import-Nr.
Sobald du versuchst einen zweiten Datensatz mit Importnummr = 1 anzulegen, gibt es also eine Primärschlüsselverletzung.

Re: Tabelle mit Werten aus anderer Tabelel füllen

22. April 2010 11:01

Hallo Josef,

scheinbar kann es in der Tabelle impLog mehrmals dieselbe Importnummer geben, jedoch kannst du in deiner Tabelle geldein jede Importnummer nur einmal verwalten.

Sofern dies beabsichtigt und korrekt ist, musst du den Rückgabewert des Befehls INSERT abfragen.

Darüber hinaus solltest du niemals FINDFIRST in Verbindung mit einer Schleife verwenden.
FINDFIRST / FINDLAST sollten nur dann verwendet werden, wenn du ausschließlich den ersten / letzten Datensatz der Tabelle benötigst.
Möchtest du also mehrere Datensätze verarbeiten, so nutze bitte FINDSET.

Hier nun der überarbeitete C/AL-Code:
Code:
lr_impLog.RESET;
lr_impLog.SETCURRENTKEY(Importnummer,Laufnummer);
lr_impLog.SETRANGE(Importnummer);
IF lr_impLog.FINDSET(FALSE) THEN  // <-- FINDSET anstelle von FINDFIRST
  REPEAT
    lr_geldein."Import-Nr" := lr_impLog.Importnummer;
    IF lr_geldein.INSERT(FALSE) THEN  // <-- Rückgabewert abfragen
      ;
  UNTIL lr_impLog.NEXT = 0;

Re: Tabelle mit Werten aus anderer Tabelel füllen

22. April 2010 11:24

Erst mal Danke für die Antworten.
Das mehrmals die selbe Importnummer vorhanden ist, ist korrekt. Nur habe ich nicht gesehen, dass jede Importnummer sich dann noch mal unterteilt ist. Danach kann ich filtern.
Vielen Dank noch mal für die Antworten.