[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2014
    Beiträge
    310
    ?
    Der zweite Cursor hat ja keinen Bezug zum ersten.
    However, wenn ich Deine Frage richtig verstehe, dann benötigst Du nur den zweiten(!) Cursor, da muss das WHERE und ORDER BY angegeben sein und Du kannst alle gewünschten Sätze nacheinander einlesen.
    Wenn das nicht funktioniert, hast Du irgendwo einen anderen fehler!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wieso einen 2. Cursor?
    Du musst folgendes vergleichen:

    DECLARE MYCURSOR FOR ... = SELECT in Cobol
    OPEN MYCURSOR = OPEN in Cobol + START
    FETCH = Read next in Cobol
    CLOSE = CLOSE in Cobol

    In Native IO würdest du doch auch nicht ständig Open/Start/Read/Close machen oder?
    Genauso ist das in SQL.
    1 mal OPEN
    n mal FETCH
    1 mal CLOSE

    Hier kommt dann die Variable SQLCODE ins Spiel (les doch mal das Handbuch!).
    SQLCODE = ZERO => immer alles OK
    SQLCODE = 100 => entspricht READ ... AT END ...
    SQLCODE < ZERO => entspricht Filestatus, Fehler mit Abbruch in den SQL's
    SQLCODE > ZERO => entspricht Filestatus, Fehler mit Warnung in den SQL's, weitermachen möglich
    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

  3. #3
    Registriert seit
    Feb 2015
    Beiträge
    19
    Hallo miteinander
    Also ich habe jetzt auf nur noch einen Cursor umgestellt.
    EXEC SQL
    DECLARE CRSCTNO CURSOR FOR
    SELECT
    T01.SHORTN,
    T01.CTNO,
    T01.NAMPA1
    FROM VMKJF25001 T01
    WHERE T01.SHORTN >= :SQL-SHORTN
    ORDER BY SHORTN
    FOR FETCH ONLY
    END-EXEC.
    Dann rufe ich diesen Cursor auf und bereits beim ersten Aufruf bringt er mir nicht den ersten, der grösser als das SQL-SHORTN ist, sondern den ersten, der vorhanden ist (a, etc). Wenn ich den ORDER BY wegnehme, bringt er mir den gewünschten, aber die nachfolgenden halt nicht in der Reihenfolge des SHORTN
    Ich habe das alles mit Displays entsprechend dokumentiert

  4. #4
    Registriert seit
    Dec 2014
    Beiträge
    310
    Dein SQL sieht vollkommen richtig aus!
    Der Fehler muss woanders liegen.
    Wie ist die Feldbeschreibung von SHORTN?
    Wie ist der Feldinhalt von SQL-SHORTN?
    Welcher Wert sollte nach dem ersten Lesen in SHORTN stehen?
    usw..

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Also ich sag mal wenn Du das SQL interaktiv aufrufst, dann sollte das Ergebnis das selbe sein wie wenn Du es im Programm machst.
    Am besten Du postest mal das Programm, dann kann man sehen ob Du evtl. einen Fehler im nachhinein oder im Vorraus machst.
    Evtl. dadurch das Du am Anfang dachtest du bräuchtest 2 Cursors und deswegen arbeitets Du evtl mit den falschen Variablen.
    STRDBG kann Dein Freund sein.

    Wobei ich so etwas auch immer kapseln würde. Sprich alle Datenbankaufrufe kommen in ein Modul und werden von außen aufgerufen. Dann ist es mir egal ob innendrinn SQL arbeitet oder normales COBOL START / Read Next etc.

    GG

  6. #6
    Registriert seit
    Feb 2015
    Beiträge
    19
    Als erstes einmal vielen Dank an alle, die mir geholfen haben. Ich bin halt nicht nur im AS400 ein Neuling, sondern habe auch im SQL relativ wenig Erfahrung. Aber jetzt läuft alles korrekt und bringt die richtigen Ergebnisse. Ich denke mal, durch das Cursor-Setzen kann ich nur sequentiell weiterlesen. Ein Aufsetzen vor der aktuellen Position habe ich nur erreicht, indem ich ein Close und Open gemacht habe. Beim SHORTN handelt es sich um ein 12-stelliges Feld, das zudem wahrscheinlich ein Key ist.
    LG Günter

  7. #7
    Registriert seit
    Feb 2015
    Beiträge
    19
    Noch etwas
    Ich bin ja Pragmatiker, d.h. ich habe jetzt einen Loop eingebaut, dass er selbst bis auf den gewünschten liest, erst dann beginnt meine eigentliche Verarbeitung. Das funktioniert auch soweit, obwohl es natürlich nicht schön ist. Wenn ich dann aber auf einen Wert selektieren möchte der vor der aktuellen Position liegt, funktioniert das wieder nicht, lediglich die Selektion auf einen Wert grösser als die momentne Position funktioniert. Ich könnte jetzt natürlich bei einem Wert kleiner als meine Position einen Close und Open machen, denke, dann geht es auch wieder, aber irgendwie sehr unschön !!!!!

Similar Threads

  1. Antworten: 7
    Letzter Beitrag: 13-01-15, 16:43
  2. 3488 Info Window II
    By hdw2 in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-07-14, 14:27
  3. Eingabe Subfile in einem Window
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 16-04-14, 16:20
  4. Alter Hintergrund bei aufgerufenem Window
    By Robi in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 14-11-13, 16:18
  5. DSPF / Window / Overlay
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-05-03, 10:05

Tags for this Thread

Berechtigungen

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