[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2006
    Beiträge
    3

    setll und %found

    Hallo zusammen,

    mir scheint die Funktionionalität von %found nicht ganz klar zu sein: Ich hatte erwartet, dass bei folgender Codierung

    C KeyVGN SETLL SMVERGN1
    C IF %FOUND(SMVERGN1)
    C READ SMVERGN1

    die read-Anweisung nur ausgeführt wird, wenn das setll-Statement einen passenden Satz gefunden hat (analog zur 3. Bezugszahl beim SETLL im RPGIII). Leider liest das Programm in obigem Fall gnadenlos den Satz nach der Positionierung, egal, ob der Schlüssel gefunden wird oder nicht. Gilt %FOUND am Ende nur nach CHAIN bzw. READE-Anweisungen?

    Vielen Dank für eine Antwort
    Simone Sylten-Schütz

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hallo Simone,

    SETLL und LOOKUP und %FOUND und %EQUAL.

    Bei SETLL wird der Indikator für %FOUND auf *ON gesetzt, wenn ein folgender READ erfolgreich wäre, das heißt jedoch nicht, dass auf einen Satz mit genau dem vorgegebenen Schlüssel positioniert wurde (wie Du bereits festgestellt hast!)

    Um eine genaue Übereinstimmung zu prüfen muss die Funktion %EQUAL verwendet werden. Diese wird auf *ON gesetzt, wenn mindestens ein Satz mit genau diesem Schlüssel vorhanden ist.

    Ähnliches gilt für den Operation Code LOOKUP.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Aug 2004
    Beiträge
    923
    Hello Simone,

    %found gilt laut Handbuch für
    PHP-Code:
    The operations that set %FOUND are:
    File operations:
    CHAIN (Random Retrieval from a File
    DELETE (Delete Record
    SETGT (Set Greater Than)
    SETLL (Set Lower Limit)
    String operations:
    CHECK (Check Characters)
    CHECKR (Check Reverse
    SCAN 
    (Scan String

    gruss

    kuempi

    Ach da war Birgitta mal wieder schneller.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ausserdem, wenn man schon per SETLL einen bestimmten Schlüssel sucht sollte man auch mit READE weiterlesen.
    SETLL positioniert und liest nicht. Per READ kann natürlich (solange nicht EOF) immer weitergelesen werden.

    Abkürzen kann man das auch, wenn man per CHAIN mit verkürztem Key zugreift. Dies entspricht einer SETLL/READE-Kombination und ist in der Logik ggf. verständlicher.
    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

  5. #5
    Registriert seit
    Oct 2006
    Beiträge
    3
    Vielen Dank für die Hilfe - %equal ist mir sehr sympathisch - auch wenn mir nach der Erklärung der Unterschied zwischen %found und %eof nicht so ganz klar ist (außer, dass die beiden immer das Gegenteil liefern müssten).

    Ich benutze meist erst ein setll und dann das read, weil - vor langer Zeit - mir mal gesagt wurde, dass das der schnellste Weg sei (setll ginge schneller als jedes read, read ginge schneller als reade).

    Chain beinhaltet auf jeden Fall ein read (egal, ob setll zuvor erfolgreich oder nicht) und damit werden auch u.U. Feldinhalte überschrieben, die nur im Falle eines passenden Satzes aktualisiert werden sollten.

    Gruß Simone

  6. #6
    Registriert seit
    Aug 2004
    Beiträge
    923
    Zitat Zitat von ssylten
    ...Chain beinhaltet auf jeden Fall ein read (egal, ob setll zuvor erfolgreich oder nicht) und damit werden auch u.U. Feldinhalte überschrieben, die nur im Falle eines passenden Satzes aktualisiert werden sollten.
    ...
    Wer erzählt denn sowas?
    Das mag ich gar nicht glauben.

    k.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Naja, wer wohl

    Aber sei's drum:

    SETLL/READE ist eigentlich langsamer als CHAIN (verkürzter Key), da ja nur 1 DB-Aufruf statt 2 erfolgen.

    Wenn der Chain nicht erfolgreich ist, bleiben Variablen ja erhalten.
    Der SETLL setzt in der Datei auf, wenn es einen größeren Schlüssel gibt, wird eben %found gemeldet.
    %eof gibts ja nur bei den READ-Befehlen und %FOUND/%EQUAL eben bei SETLL/GT bzw. %lokupxx.

    Aber wie immer, es gibt ja viele Methoden...
    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

Similar Threads

  1. Os400 Fehler ?
    By Robi in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 04-11-06, 16:02
  2. Abbruch bei SETLL
    By haertl in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 11-01-06, 14:00

Berechtigungen

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