Änderung eines Primärschlüsselfeldes

Bild Microsoft Dynamics NAV 3.xx
(ehem. Navision Attain)

Änderung eines Primärschlüsselfeldes

Beitragvon Rossi » 27. November 2014 11:17

GELĂ–ST
Hallo zusammen,

bin neu hier und auch noch recht neu im NAV.

Folgendes Problem stellt sich mir:

Tabelle mit einem zweiteiligen Primärschlüssel (Felder Code und Startdatum) (Über 20.000 Datensätze).
Ich habe nun die Aufgabe das Startdatum (z.B. von 01.01.2014 auf 01.01.2013) zu ändern.

Wie löse ich das Problem, da ich weder mit Dataport noch mit Report (Stapellauf) weitergekommen bin. Ich wäre um ein Musterbeispiel in C/AL dankbar.

Vielen Dank

Michael
Zuletzt geändert von Rossi am 14. Juli 2017 16:00, insgesamt 1-mal geändert.
Rossi
 
Beiträge: 39
Registriert: 27. November 2014 11:09
Realer Name: Michael RaĂź
Arbeitsort: Bayern
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2016

Re: Änderung eines Primärschlüsselfeldes

Beitragvon Natalie » 27. November 2014 11:32

Herzlich Willkommen bei uns!

Wann immer Feldwerte des Primärschlüssels geändert werden sollen, ist dies eine Umbenennung (Rename). Es ist dann das Gleiche, als würdest du z.B. eine Artikelnummer ändern.
Umbenennungen sind nicht nur recht inperformant, sondern bergen auch ein gewisses Risiko fĂĽr andere Tabellen, die mit der aktuellen verknĂĽpft sind.

Daher sollte immer zuerst sicher gestellt sein, dass diese Umbenennung nicht zusätzliche Probleme auslösen würde. Da ich weder eure Tabelle noch eure Umgebung kenne, müsst ihr euch die Frage selber beantworten.

Ab dann sind zwei verschiedene Wege denkbar, das kannst du mit einem Report oder einer Codeunit realisieren:
  1. Anstatt die Umbennenung vorzunehmen, fĂĽgst du pro Code einen weiteren Datensatz mit Startdatum 01.01.2013 sein. Dann habt ihr aber doppelt so viele Datensatze wie vorher.
  2. Wenn faktsich wirklich eine Umbenennung vorgenommen werden muss, würde ich das nicht über die RENAME-Funktion machen, sondern wie in Schritt 1 über eine Neuanlage von Datensätzen - und die Datensätze mit dem falschen Datum werden im Anschluss gelöscht.
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Änderung eines Primärschlüsselfeldes

Beitragvon Rossi » 27. November 2014 12:19

Vielen Dank fĂĽr den Hinweis auf den ersten groĂźen Fehler, den ich gemacht habe.
RENAME. Ich habe hier mit MODIFY gearbeitet.

Es ist richtig, dass es auf die Performance geht aber wenn ich nicht über RENAME das mache, könnte ich den Bezug zu bestehenden Datensätzen, die mit dieser Tabelle verbunden sind, verlieren.
Es funktioniert aber trotzdem nicht.

Hier mein Code in der Codeunit:

OnRun()
CLEARALL;
Kommune.RESET; //(Kommune ist eine globale Record-Variable auf die Tabelle Commune)

Startalt := '01.01.2014'; //Startalt und -neu sind globale Textvariablen
Startneu := '02.01.2014';
EVALUATE(Datealt,Startalt); //Datealt und -neu sind globale Date-Variablen
EVALUATE(Dateneu,Startneu);

Kommune.SETRANGE("Starting Date",Datealt); //Abfilterung der kompletten Tabelle auf alle Datensätze mit Startdatum = 01.01.2014
Kommune.FINDSET;

REPEAT;
Kommune."Starting Date" := Dateneu; //Ă„ndern
Kommune.RENAME(TRUE); //Ă„nderung durchfĂĽhren

UNTIL Kommune.NEXT = 0; //Bis kein Datensatz in diesem FINDSET mehr vorhanden ist.
EXIT;

Folgender Fehler erscheint:

Eine Typkonvertierung des Ausdrucks Boolean in einen Code-Wert ist nicht möglich!

?!?!?
Sorry für meine umständliche Herangehensweise!

VG
Michael
Rossi
 
Beiträge: 39
Registriert: 27. November 2014 11:09
Realer Name: Michael RaĂź
Arbeitsort: Bayern
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2016

Re: Änderung eines Primärschlüsselfeldes

Beitragvon m_schneider » 27. November 2014 12:30

Dem Rename - Befehl werden die zu ändernden Primärschlüsselfelder direkt übergeben.
Code: Alles auswählen
[Ok :=] Record.RENAME(Value1, [Value2],...)

Also wäre es so richtig
Code: Alles auswählen
...
REPEAT;
  Kommune.RENAME(Code, Dateneu); //Ă„nderung durchfĂĽhren
UNTIL Kommune.NEXT = 0;
...
MfG Michael
Benutzeravatar
m_schneider
 
Beiträge: 2146
Registriert: 20. Januar 2009 14:36
Realer Name: Michael Schneider
Arbeitsort: Treuen
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: Änderung eines Primärschlüsselfeldes

Beitragvon Rossi » 27. November 2014 12:38

Vielen Dank! Funktioniert!
Rossi
 
Beiträge: 39
Registriert: 27. November 2014 11:09
Realer Name: Michael RaĂź
Arbeitsort: Bayern
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2016

Re: Änderung eines Primärschlüsselfeldes

Beitragvon JRenz » 27. November 2014 13:28

Hallo,

alternativ zum RENAME kann auch mit einer zweiten Record-Variable und INSERT/DELETE gearbeitet werden.

z.B.
Code: Alles auswählen
if Record1.findset then
  repeat
    Record2 := Record1;
    Record2."Starting Date" := Startneu;
    IF Record2.insert(true) then
      Record1.delete(true);
  until Record1.next = 0;
GruĂź
Jörg
JRenz
Microsoft Partner
Microsoft Partner
 
Beiträge: 479
Registriert: 27. April 2007 09:22
Arbeitsort: Neu-Ulm
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x bis BC 365

Re: Änderung eines Primärschlüsselfeldes

Beitragvon Kowa » 27. November 2014 13:48

JRenz hat geschrieben:alternativ zum RENAME kann auch mit einer zweiten Record-Variable und INSERT/DELETE gearbeitet werden.

Das geht zwar wesentlich schneller, aber es werden dabei im Gegensatz zum RENAME keine Werte in anderen Tabellen mitgeändert, die ggf. eine Beziehung zu den/m Felder(n) des Primärschlüssels haben. Das muss dabei also immer vorab geprüft werden, sonst drohen Inkonsistenzen in der Datenbank.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Änderung eines Primärschlüsselfeldes

Beitragvon woger » 27. November 2014 13:52

Wahrscheinlich macht es auch beim Lösungsansatz von m_schneider Sinn, für den eigentlichen RENAME eine weitere Recordvariable zu verwenden, damit man beim FIND-NEXT in der richtigen Sortierreihenfolge bleibt.
GruĂź, woger
woger
Microsoft Partner
Microsoft Partner
 
Beiträge: 69
Registriert: 22. November 2007 11:12
Bezug zu Microsoft Dynamics: Microsoft Partner

Re: Änderung eines Primärschlüsselfeldes

Beitragvon BotoxWade » 25. September 2019 08:09

Hallo Leute

Klappt irgendwie alles nicht... Nach wie vor ist meine Tabelle Verkaufspreis nicht gefĂĽllt.

Herzliche GrĂĽĂźe

BotoxWade
BotoxWade
 
Beiträge: 12
Registriert: 19. Juni 2015 12:19
Realer Name: Frank H. A. Becker
Arbeitsort: Duisburg
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Änderung eines Primärschlüsselfeldes

Beitragvon sweikelt » 25. September 2019 08:19

Guten Morgen,

kannst du uns denn deinen Quellcode teilen, damit man erkennen kann, was wie wo nicht läuft?
Ins Blaue raten hilft hier recht wenig :)
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1781
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Änderung eines Primärschlüsselfeldes

Beitragvon Kowa » 25. September 2019 09:00

sweikelt hat geschrieben:kannst du uns denn deinen Quellcode teilen,

Der aktuelle Fall dazu ist hier.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01


ZurĂĽck zu NAV 3.xx

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast