[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.049
    Hallo guten Morgen!

    Ein Problem könnte noch die RRN-Funktion haben, da die ggf. nicht optimierbar ist oder den Dynamic-Cursor verhindert.

    Wofür brauchst du die überhaupt ?
    Na ja, das ist halt ein Pgm das mit den gelesenen Sätzen
    und anderen Dateien ein bisserl rumrechnet und anschl. die Dateien updatet.
    Da wir mit 'Lese und Schreib'-Programmen arbeiten (Es gibt keine F-Karte in den Programmen, zum lesen und schreiben wird ein Pgm gerufen) brauchen wir die Satznr. Die ist Basis für das Schreiben .

    Du benötigst einen Dynamic-Scroll-Cursor.
    Dann ist es aber wichtig, dass du für die On-Beziehung und Where-Klause die richtigen Zugriffspfade hast.
    DECLARE C1 DYNAMIC SCROLL CURSOR FOR SEL_FLD
    ist dann wohl das richtige

    Zugriffspfade sind ok


    Vielen Dank euch beiden

    gruß
    Robi

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.049

    irgendwie nicht

    das Programm habe ich geändert und an den Kunden geschickt.
    Heute kommt ne Meldung, das das programm imernoch Daten
    zerstört (beim Update alte Sätze schreibt)
    d.h. Das Pgm 'liest' immernoch den Inhalt der Datensätze zum Zeitpunkt des Open und nicht des Fetch

    C/EXEC SQL
    C+ DECLARE C1 DYNAMIC SCROLL CURSOR FOR SE_FLD
    C/END-EXEC

    fehlt mir noch was

    @Fuerchau

    Join's sind immer temporär (ggf. Kopie der Daten) und werden beim Open nicht beim Prepare ermittelt.
    Du benötigst einen Dynamic-Scroll-Cursor.
    Dann ist es aber wichtig, dass du für die On-Beziehung und Where-Klause die richtigen Zugriffspfade hast.

    Immer Temporär ? dann geht das also nicht ? trozu dynamic-scroll-cursor ?

    Danke
    Robi

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.390
    Hallo,

    der dynamic scroll cursor kann allenfalls sicher stellen, dass die Daten tatsächlich beim Fetch geholt werden (wobei man da nochmal in der Reference und bei der Wandlung genau nachsehen sollte, ob das auch so erstellt wird, oder per warning unterlassen wird). Was dann zwischen fetch und update passiert, steuert das commit level und was da genau unter blablabla zu verstehen ist.

    mfg

    Dieter Bender

    Zitat Zitat von Robi Beitrag anzeigen
    das Programm habe ich geändert und an den Kunden geschickt.
    Heute kommt ne Meldung, das das programm imernoch Daten
    zerstört (beim Update alte Sätze schreibt)
    d.h. Das Pgm 'liest' immernoch den Inhalt der Datensätze zum Zeitpunkt des Open und nicht des Fetch

    C/EXEC SQL
    C+ DECLARE C1 DYNAMIC SCROLL CURSOR FOR SE_FLD
    C/END-EXEC

    fehlt mir noch was

    @Fuerchau

    Join's sind immer temporär (ggf. Kopie der Daten) und werden beim Open nicht beim Prepare ermittelt.
    Du benötigst einen Dynamic-Scroll-Cursor.
    Dann ist es aber wichtig, dass du für die On-Beziehung und Where-Klause die richtigen Zugriffspfade hast.

    Immer Temporär ? dann geht das also nicht ? trozu dynamic-scroll-cursor ?

    Danke
    Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.789
    Ausserdem muss man noch bedenken, dass bei Joins ggf. auf Kopien zugegriffen wird (ALWCPYDTA), gibts auch irgend eine QAQQINI-Einstellung dafür.
    Desweiteren wird beim Lesen auch häufig geblockt, so dass bereits mehrere Sätze im Puffer stehen, während andere "lustig" die Daten bereits verändern.

    Das hat auch gar nichts mit SQL zu tun, sonder geschieht auch bei (ILE)RPG.
    Verarbeite ich eine Datei sequentiell mit Input, kann ich für späteren Update nicht garantieren, dass die Daten noch korrekt sind.

    Hierfür gibts das Konzpt der Satzsperren, so dass ich bei einer U-Datei den Satz vor Änderungen schütze.

    Bei SQL geht das nur, wenn die Dateien journalisiert werden, da ich dann mit dem entsprechenden Commitlevel bereits beim Lesen sperren kann. Ansonsten erlaubt SQL (wie bei I-Dateien) jederzeit einen "Dirty"-Read !

    Um also "alten" Schrott nicht zurückzuschreiben muss man entweder journalisieren, oder (so machts z.B. MS-Access automatisch):

    update myfile set field=newval
    where myfile.key=mykey and field=oldval

    SQLCOD=0 bedeutet, Update erfolgreich, SQLCOD=100 bedeutet
    a) Satz nicht mehr da oder
    b) Oldval stimmt nicht mehr

    Die RRN kann da eher tödlich werden, da diese je nach Methode inzwischen anders sein kann.
    Es soll Anwendungen geben, die einen zu verändernden Satz vorher löschen und dann neu anlegen. Die RRN ist daher nie eine Garantie, dass diese hinterher auch wieder stimmt.
    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. SQL left join
    By ahingerl in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 08-12-06, 09:28
  2. SQL - Join mit Bedingung und Update
    By cassi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-11-06, 16:03
  3. SQL JOIN
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-10-06, 08:56
  4. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 09:13
  5. RPG mit Embedded SQL, JOIN ..
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-06-06, 13:14

Berechtigungen

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