[gelöst] recods vereinen, mergen

20. September 2006 09:34

Guten Morgen

Ist es möglich zwei Recordsets ineinander zu mergen im Style von

Datenryp: Record der gleichen Tabelle

recordset := recordset + temprecordset;

Grüsse Globi
Zuletzt geändert von globi am 20. September 2006 14:54, insgesamt 1-mal geändert.

20. September 2006 10:07

Nein, das ist so nicht möglich. Du musst die Records der einen Tabelle an der anderen anfügeb mit:

- INIT
- Felder füllen
- INSERT

20. September 2006 10:15

Hmm.

Wenn ich dich richtig verstehe, dann heisst "mergen" hier so etwas wie "nicht leere Felder von einem Record in den anderen übertragen"?!

Wenn dem so ist, dann besteht die Möglichkeit über RecordRef und FieldRef Datentypen zu arbeiten. Ist natürlich schwierig bei Boolean oder Decimal Feldern festzustellen ob sie leer sind. Aber für Text und Code Felder hab ich das schonmal gemacht:

Code:
    PROCEDURE TransferNonEmptyTextFields@1000000000(VAR Record1@1000000009 : Record 36;VAR Record2@1000000008 : Record 36);
    VAR
      SourceRecRef@1000000001 : RecordRef;
      DestRecRef@1000000000 : RecordRef;
      SourceFieldRef@1000000007 : FieldRef;
      DestFieldRef@1000000006 : FieldRef;
      Count@1000000005 : Integer;
      i@1000000004 : Integer;
      FieldType@1000000003 : Code[20];
      Value@1000000002 : Text[512];
    BEGIN
      SourceRecRef.GETTABLE(Record1);
      DestRecRef.GETTABLE(Record2);

      Count := SourceRecRef.FIELDCOUNT;

      FOR i := 1 TO Count DO BEGIN

        SourceFieldRef := SourceRecRef.FIELDINDEX(i);
        FieldType := FORMAT(SourceFieldRef.TYPE);

        IF (FieldType = 'CODE') OR (FieldType = 'TEXT') THEN BEGIN

          Value := FORMAT(SourceFieldRef.VALUE);

          IF Value <> '' THEN BEGIN
            DestFieldRef := DestRecRef.FIELDINDEX(i);
            DestFieldRef.VALUE(Value);
          END;

        END;

      END;
    END;


Hoffe ich lag mit meiner Vermutung richtig.

20. September 2006 10:21

ok dan hab ich den falschen Lösungsweg. mein Problem ist Folgendes.

ich habe eine Tabelle in der ich Verknüfpfungen von Datensätzen habe.

Nun möcht ich dem Benutzer ein Formular bieten in dem er alle Verknüpfungen mit einem Kriterium hat.

in der Tabelle ist das Kriterium in verschiedenen Spalten gspeichert.

Nun habe ich mit dem Marker den Filter au die Spalten gesetzt und die markierten im Formular angezeigt.

Nun ist jedoch im Formular das Kriterium einmal in dieser und das anderemal in der anderen Spalte was zur Unübersicht führt.

Mit einer Sortierfunktion wollte ich die Tabelle umsortieren das ich sie nur noch anzeigen muss

Ich möchte, dass das Kiterium in der gleichen Spalte angezeigt wird.

20. September 2006 10:58

Nochmal zum mitschreiben:

Du hast eine Tabelle in der Kriterien (durchaus auch die gleichen) in verschiedenen Spalten vorkommen können. Für den Benutzer ist es zu unübersichtlich, auch bei korrekter Filterung, Zusammmenhänge zu erfassen, da zusammenhängende Datensätze nicht optisch zusammenhängend dargestellt werden.

Da ich nur raten kann, wie die Struktur ist, wären einige Beispieldatensätze (die das Problem darstellen) hilfreich. Ggf. auch die Tabellendefinition.

20. September 2006 11:13

Für den Benutzer ist es zu unübersichtlich, auch bei korrekter Filterung, Zusammmenhänge zu erfassen, da zusammenhängende Datensätze nicht optisch zusammenhängend dargestellt werden.

Das ist es



Ich versuchs
Was ich habe sieht so aus wie auf dem bild.
Das Kriterium hierzu ist "KT000020"

Nun möchte ich das Kriterium in der Spalte "Code Tabelle 1" anzeigen lasen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von globi am 20. September 2006 13:23, insgesamt 2-mal geändert.

20. September 2006 12:40

Ohoh :shock:

Offensichtlich wird diese Tabelle aus verschiedenen Sichten gefüllt. Also vom Kontakt aus wird die Eigenschaft referenziert und vom Artikel und weiteren Tabellen der Kontakt. Deshalb die etwas verwirrende Struktur.

Da die jeweils aufrufende Form bzw. Tabelle ja bekannt ist würde ich eine Funktion bauen die jeweils aus Sicht der aufrufenden Form einen temporären, nach Aufrufer strukturierten und sortierten Record erstellt (ggf. Werte vertauscht) und nach verlassen mit der physischen Tabelle abgleicht.

Ansonsten hast du aus meiner Sicht kaum eine andere Chance, da man, wie man am ersten Eintrag sieht, auch nicht nach Stamm- und Zusatzdaten trennen kann.

Um keine festen Werte benutzen zu müssen, könntest du für die Tabellennummer den kurzen Umweg über eine RecordRef Variable gehen:

Code:
RecordRef.GETTABLE(Rec);
UmbauFunktion(RecordRef.NUMBER);


Mehr kann ich dir leider nicht anbieten...

20. September 2006 13:57

Wenn auf dieses Kriterium gezielt gefiltert werden soll, dann mach doch ein "Filterfeld" oberhalb der Tabelle und lass die Spalten, wo das Kriterium drin steht, komplett aus der Tabelle raus.
Wenn auf mehrere verschiedene Kriterien gefiltert werden soll, du also in der Zeile sehen musst, welches Kriterium gerade aktiv ist, bleibt dir nur eine Variable vom Typ der fraglichen Felder anzulegen, diese in die Tablebox einzubauen und im OnAfterGetRecord-Trigger mit dem Wert des Kriteriums zu füllen, dann kannst du auch hier die fraglichen Spalten ausblenden.

20. September 2006 14:53

ich habs mit den globalen Variabeln im OnaftergetRecord gemacht.

Vielen Dank für eure Hilfe.
Bin richtig froh gibt es dieses Forum

20. September 2006 20:16

globi hat geschrieben:[...]
Vielen Dank für eure Hilfe.
Bin richtig froh gibt es dieses Forum

Vielen Dank für das Lob, ich reiche es mal direkt an alle Mitglieder weiter, welche hier so engagiert mitwirken.
Solche Worte motivieren, da sie zeigen, dass die Hilfe entsprechend gewürdigt wird.