[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2015
    Beiträge
    28

    Satzformat komplett sichern und Vergleichen

    Hallo,

    ich habe das Problem das ich bei einer Veränderung im Programm reagieren möchte.

    Beispiel:
    FMyDatei UF A E K DISK
    F RENAME(MyDateiF:MyForm)
    F** --------------------------------------------------------------
    *================================================= ====================
    * Record comparison
    *================================================= ====================
    DSavRec e ds extname(MyDatei) inz
    DSvBefore ds likerec(MyForm) inz
    DSvAfter ds likerec(MyForm) inz
    *================================================= ====================


    chain(e) (Key01:Key02) MyDatei; // lesen MyDatei
    // Sichern alte Satzinhalt
    clear SvBefore ; // Vergleichsfelder löschen
    clear SvAfter ; // Vergleichsfelder löschen
    if %found(MyDatei); // gefunden MyDatei
    SvBefore = SavRec ; // Satzinhalt sichern
    SvBefore.uekz01 = ' '; // Zustand neu erzeugen
    endif; // End gefunden MyDatei

    Verarbeitung und Neubesetzung der Satzfelder

    SvAfter = SavRec ; // Satzinhalt sichern
    if SvAfter <> SvBefore; // Sätze vergleichen
    if %found(MyDatei); // gefunden MyDatei
    update MyForm; // UPDATE
    else; // Else gefunden MyDatei
    write MyForm; // Write
    endif; // End gefunden MyDatei
    endif; // End SvAfter <> SvBefore

    aber leider steht in SavRec noch der Inhalt wie nach dem Chain und nicht die Veränderten Daten die jetzt in Format MyForm sehen.
    Wenn ich nach den Update/Write prüfen würde, würde es klappen, denn SavRec wird erst nach einer Dateioperation gefüllt. Ich möchte aber vor dem Update/Write reagieren.


    Hat jemand einen Tip für mich??

  2. #2
    Registriert seit
    Nov 2004
    Beiträge
    325
    Moin,

    da die Feldname immer gleich in der DS sind, probiere mal folgendes:

    Ds_AKtRec Prefix(_A)
    Ds_Oldrec Prefix(O_)
    Ds_NewRec Prefix (N)

    Chain in Aktrec
    Nicht da Ds_NewRec in Ds_Aktrec
    Da dann Ds_Aktrec in Ds_oldRec
    Mach was
    Ds_NewRec in Ds_Aktrec update

    mfg

    DKSPROFI

  3. #3
    Registriert seit
    Sep 2015
    Beiträge
    28
    Hi DKSPROFI,

    die DS sind nicht immer gleich.
    für SvBefore heist das Feld uekz01 z.B. SvBefore.uekz0;
    Mein Problem ist, das ich die Felder von MyForm geändert habe und jetzt vergleichen möchte gegen meinen gesicherten Stand.
    Also die DS SvBefore mit dem aktuellen Stand.

    Kann aber das Format MyForm nicht der DS SvAfter zuweisen oder SvBefore mit dem Format MyForm vergleichen.

    Ich habe dass schonmal gemacht, kann aber leider die SRC nicht finden.

    Gruß

    Paul

  4. #4
    Registriert seit
    Nov 2004
    Beiträge
    325
    Moin,

    das mit dem Rename habe ich glatt überlesen. Was spricht denn gegen die DS aktuell, alt neu, oder nur Before und after?

    mfg

    Michael

  5. #5
    Registriert seit
    Sep 2015
    Beiträge
    28
    Hi DKSPROFI,

    eigentlich nichts, ich stehe nur im Moment auf dem Schlauch, wie ich das komplette Satzformat in eine DS verschieben (sichern) kann um dann zu vergleichen.

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    905
    Für solche Fälle verwende ich in der per Definition:

    dcl-ds $SvBefore likeds (SavRec);
    dcl-ds $SvAfter likeds (SavRec);
    Dann kann ich verschieben und vergleichen bis ich lustig bin.
    kf

  7. #7
    Registriert seit
    Sep 2015
    Beiträge
    28
    Hallo zusammen,

    habe das Problem gelöst. War auch mit der ersten Lösung OK.
    Hatte einen anderen Fehler im Programm.

    Wenn aber jemand den Unterschied zwischen LIKE, LIKEDS und LIKEREC einfach
    beschreiben könnte, wäre das toll.

    Gruß
    Paul

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    LIKEREC lädt die Feldinformationen aus dem Satzformat und listet diese in der DS auf, funktioniert also wie LIKEDS.
    LIKE definiert ein Feld wie ein anderes, auf das man sich bezieht.
    Eine DS ist aber auch ein Feld, daher ist LIKE(MYDS) nur ein Zeichen-Feld in der Größe der DS.
    LIKEDS(MYDS) definiert eine UnterDS, allerdings nur wenn auch Qualified verwendet wird.
    Ohne Qualified darf ein Feld nur in einer DS vorkommen.

    DS1 DS Qualified
    F1 10
    F2 5I 0

    DS2 DS Qualified
    F1 like(DS1.F1)
    F2 like(DS1)
    F3 likeds(DS1)

    Du hat nun folgende Felder:
    DS1
    DS1.F1
    DS1.F2

    DS2
    DS2.F1
    DS2.F2 <= nur ein Zeichenfeld
    DS2.F3
    DS2.F3.F1
    DS2.F3.F2
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Sep 2015
    Beiträge
    28
    Hallo Fuerchau,

    das habe ich jetzt verstanden.
    Danke für die tolle Erklärung.

    Gruß
    Paul

Similar Threads

  1. Zeitstempel mit CHAR-Feld vergleichen
    By harbir in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 02:29
  2. Vergleichen Feldinhalte von qualifizierten Datenstrukturen
    By it-dol in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-07-14, 13:05
  3. RDi 9.0: Teildateien vergleichen / merge
    By camouflage in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 22-07-14, 12:10
  4. MOVE auf Satzformat
    By Booley in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 09-12-02, 15:24
  5. ganzes Satzformat in Variable ?
    By hpw in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 15-10-01, 13:23

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •