[Gelöst] Tabellen vergleichen

27. November 2009 18:08

Hallo zusammen,
ich hab ein sehr kleines Problem für die meisten hier im Forum, welches ich leider nicht lösen kann.

Ich hab zwei Tabellen, die ich vergleichen möchte.
In beiden Tabellen stehen Artikelnummern und wenn eine mit der anderen übereinstimmt, soll aus einer der Tabellen ein Wert eines Feldes in die andere Tabelle geschrieben werden.
Wer kann mir auf die Sprünge helfen?
Zuletzt geändert von Haube1X am 30. November 2009 17:24, insgesamt 1-mal geändert.

Re: Tabellen vergleichen

27. November 2009 18:24

Das ist so ein wenig vage. Ist denn sicher, dass jede Nummer in beiden Tabellen nur einmal vorkommt?

Re: Tabellen vergleichen

27. November 2009 18:31

Ja... 100%

Re: Tabellen vergleichen

27. November 2009 18:36

Die Abfrage ist einfach, das wird etwas in der Richtung sein...
Code:
IF Table1."Item No." = Table2."Item No." THEN BEGIN
  Table2.Wert := Table1.Wert;  // oder mit VALIDATE, je nachdem
  Table2.MODIFY;
END;

Aber das Entscheidende ist ja, daß die Recordvariablen vorher auf die richtigen Datensätze gesetzt werden. Und wie McClane schon richtig gesagt hat, kommt es darauf an, was Du genau machen möchtest, denn nicht immer ist das Gewünschte auch sinnvoll und gesetzlich erlaubt.

Re: Tabellen vergleichen

28. November 2009 13:12

Diese Lösungsvariante hatte ich auch schon ausprobiert. Ich bekomme jedoch die Fehlermeldung: Artikel Nr. '' existiert nicht.
Das passiert wenn ich mit dem Befehl MODIFY arbeite. Wenn ich VALIDATE nutze kommt zwar keine Fehlermeldung, aber es werden die Werte der angegeben Felder nicht verändert.
Das Data Item liegt auf Tabelle1 und die Record Variable auf Tabelle2.
Ich hab echt keinen Plan, woran das liegen könnte.

Re: Tabellen vergleichen

28. November 2009 13:53

Klingt irgendwie danach, als hättest du in der Variablen Table2 keinen Record.

Du schreibst das DataItem liegt auf Table1, also nehm ich mal an du bist in einem Report, im Trigger OnAfterGetRecord.
Für die Variable Table2 musst du dir ja einen (oder mehrere) Datensatz aus der Datenbank holen, um den Wert der Felder zu vergleichen.

Code:
Table2.RESET;
Table2.SETFILTER(...); // deine Filterkriterien
IF Table2.FIND('-') THEN REPEAT
  IF Table1."Item No." = Table2."Item No." THEN BEGIN
    Table2.Wert := Table1.Wert; // oder: Table2.VALIDATE(Wert, Table1.Wert); - je nachdem, ob der Validate-Trigger wichtig wäre
    Table2.MODIFY; // oder: Table2.MODIFY(TRUE); - je nachdem, ob der OnModify-Trigger wichtig wäre
  END;
UNTIL Table2.NEXT = 0;


Bei diesem Beispiel gehe ich aber davon aus, das "Table2.Wert" NICHT gefiltert sind.

So der Rest der Programmierung es zulässt, kannst du auch vorher schon Table2 auf die Artikelnummer filtern, somit bekommst du nur die Datensätze der Table2 in die Schleife, die auch die Artikelnummer haben:

Code:
Table2.RESET;
Table2.SETFILTER(...); // deine Filterkriterien
Table2.SETRANGE("Item No.", Table1."Item No.");
IF Table2.FIND('-') THEN REPEAT
  Table2.Wert := Table1.Wert; // oder: Table2.VALIDATE(Wert, Table1.Wert); - je nachdem, ob der Validate-Trigger wichtig wäre
  Table2.MODIFY; // oder: Table2.MODIFY(TRUE); - je nachdem, ob der OnModify-Trigger wichtig wäre
UNTIL Table2.NEXT = 0;



Hoffe das hilft dir etwas weiter...
Phae

Re: Tabellen vergleichen

30. November 2009 17:23

Super es hat funktioniert. Vielen Dank.