[GELÖST]weitere Frage zu Temporärer Tabelle

17. April 2007 11:05

Ich habe folgendes vor.
Ich muss aus einer Tabelle mir die größte laufende Nummer nehmen +1 rechnen und dann damit Datensätze aus einer anderen Tabelle verbinden.

Ich habe vor eine Temporäre Tabelle auf Tabelle 2 zu machen und da Datensätze reinladen, die gefiltert sind.
Jedoch soll denen gleich eine neue Nummer aus Tabelle 1 verpasst werden.
Dann habe ich vor die hineingeladenen Daten aus Tabelle 2 physisch zu löschen und sie dann aus der Temporären Tabelle zurückzuspielen.

Ist mein Gedankengang so machbar, oder kann es da zu Komplikationen kommen oder sagt ihr das da eine Temporäre Tabelle völlig fehl am Platze ist??

Vielen Dank im Voraus

Schaarschi
Zuletzt geändert von Schaarschi am 17. April 2007 14:03, insgesamt 3-mal geändert.

17. April 2007 11:25

Ich habe dein Problem nicht Verstanden!
Könntest du es anders Formulieren bzw. ein Beispiel aufführen?


Die größte LFD bekommst du, in dem die Tabelle nach der LFD sortiert ist.
(Sollte dieses sein, wenn LFD der Prim.Key ist und die Tabelle nicht anders sortiert wurde!)
Dann machst du ein FIND('+')
In der OnlineHilfe findest du detailerte Infomationen zu dem Befehl FIND.
Gruß Mikka

17. April 2007 11:34

Ich habe also 2 Tabellen

Aus Tabelle 1 benötige ich eine neue höchste Nummer.
Wie das geht hat mir mikka schon netterweise verraten.

In Tabelle 2 stehen Daten, aber bisher unter der falschen Nummer.
Die richtige Nummer ist die jenige, die ich aus Tabelle 1 herauslese.

Nun will ich ich die Daten in Tab 2 so verändern, das sie die neue Nummer bekommen.
Da es aber Datensätze in Tab 2 geben wird, die bereits diese Nummer haben, wird es eine Primary-Key Verletzung geben.

Deswegen will ich die Datensätze mit allen Daten der Tabelle 2 in eine Temporäre Tabelle laden und gleichzeitig ihnen die neue Nummer verpassen,
so dass die neuen guten Daten mit den richtigen Nummern zunächst in der Temporären Tabelle stehen.

Danach will ich die "alten" Datensätze in Tabelle 2 löschen und durch die neuen guten Daten aus der Temporären Tabelle ersetzen.

Ich hoffe das ist jetzt leichter verständlich.

Danke schon mal

Schaarschi

17. April 2007 12:12

Ich würde wie folgt vorgehen (ohne Gewähr):
Einen Report erstellen, der folgendes macht:
-Auslesen der "richtigen" Nummer (Tabelle1)
-Zuweisen den Wertes in Tabelle2, entweder mit
MODIFYALL (Wenn du die Daten entsprechend Filtern kannst! Und es nicht der Prim.Key ist!)
oder jeden Datensatz einzeln mit
Code:
SETRANGE(Tabelle2_DeinFeld,Tabelle1_DeinFeld);
IF FIND('-') THEN BEGIN
  Deine_Felder2 := Deine_Felder1;
  ...
  ...
  IF NOT MODYFIY THEN;
END;

-Falls es der Primär Schlüssel ist, solltest du den Befehl RENAME benutzten
Code:
SETRANGE(Tabelle2_DeinFeld,Tabelle1_DeinFeld);
IF FIND('-') THEN
  IF RENAME(DeinWert1) THEN;

bzw.

IF Tabelle2.GET(Tabelle1_DeinFeld) THEN
  IF RENAME(DeinWert1) THEN;               // Falls der Wert bereits Existiert, mach ganichts!


Eine Temp.Tabelle benötigst du meiner Meinung nach nicht!
(Wenn ich dich richtig verstanden habe!)

Du kannst die Daten direkt in er Tabelle andern, es muss nur die Fehlermeldung abgefangen werden bzw. geprüft werden gibt es den Datensatz schon.
Gruß Mikka

17. April 2007 12:17

Hi Mikka,

das Problem bei ihm ist ja, dass die "richtige" Nummer eventuell noch belegt ist, weshalb der Umweg über eine temp. Tabelle meiner Meinung schon ganz gut ist.

Gruß, Marc

17. April 2007 12:42

Danke Marc,

auf den Gedanken bin ich nicht gekommen.
-->Also sind die Daten in der Tabelle durcheinander "gewürfelt"?!

Dann würde ich auch die Daten in einer Temp-Tabelle aufbereiten.
Ich würde dann aber andersrum anfangen und den ersten Datensatz von Tabelle2 holen.
Prüfen in Tabelle1 welches der richtige ist, den den Datensatz mit dem richtigen Wert in die Temp-Tab. schreiben.
Dann den nächsten Datensatz aus Tabelle2 holen und verarbeiten usw.

Vorteil: -->So wird sichergestellt, das ich die Daten in Tabelle2 "sauber" verabeite!
Gruß Mikka

17. April 2007 12:54

Ja der Marc hat den Nagel auf den Kopf getroffen.
Ich kann meinen Plan also umsetzen, das ist gut. :lol:

Ich benötige den Wert aus Tabelle 1 auch nur ganz am Anfang und zähle dann selbstständig hoch.

Ich danke euch auf jeden Fall und wünsche noch einen schönen Resttag

Gruß Schaarschi

17. April 2007 13:40

So ganz glücklich bin ich in der Hinsicht noch nicht,
denn er Umgang mit den Temporären Tabellen ist mir nicht ganz so vertraut.

Ich habe bisher meine Tabelle 2 und eine Tabelle Integer für das spätere inkrementieren zu dem Report hinzugefügt

Temp ist in dem Beispiel jetzt die temporäre Tabelle und "Test Temporär" die besagte Tabelle 2

Code:
Test Temporär - OnPreDataItem()
i := 5;
temp.RESET;
temp.DELETEALL;

Test Temporär - OnAfterGetRecord()
i := i+1;
temp.No := i;
temp."UD-ID" := "Test Temporär"."UD-ID";
temp.Text := "Test Temporär".Text;
temp.INSERT;
"Test Temporär".DELETE;


Damit befülle ich bisher meine Temporäre Tabelle mit den Werten.
Aber wie erfolgt dann das Rückschreiben in Tabelle 2??
In dem Record der Tabelle Integer?

Ich habe mir uach mal Report 111 angeschaut, bin damit aber nicht wirklich gut zurechtgekommen. :-(

17. April 2007 13:56

Es ist nicht notwendig ein DataItem dafür zu erstellen.
Mit den Befehl REPEAT & UNTIL xx.NEXT kanst du Zeile für Zeile verarbeiten.

Code:
// Löschen der Daten
Tabelle2.DELETEALL;

IF "temp.FIND('-') THEN
  REPEAT
    Tabelle2.Init
    // ..hier deine Felder füllen

    Tabelle2.INSERT;
  UNTIL temp.NEXT=0;


Befehle wie MODIFYALL und DELETEALL sollten mit Sorgfalt benutzt werden!
Gruß Mikka

17. April 2007 14:03

Ich danke dir Mikka.
Es haut so weit alles hin.
Ist echt ein klasse Forum hier.

Gruß Schaarschi