[NEWSboard IBMi Forum]
Seite 3 von 3 Erste ... 2 3
  1. #25
    Registriert seit
    Aug 2006
    Beiträge
    2.081
    Er hat es in einem alten Thread auch nochmal etwas ausführlicher beschrieben.

    http://newsolutions.de/forum-systemi...ight=cobol+sql

    Wobei ich Deine Konstruktion nicht wirklich verstanden habe.....

    GG

  2. #26
    Registriert seit
    Feb 2015
    Beiträge
    19
    Hallo Fuerchau
    Ich hatte Dir Gestern Abend noch ein mail an Deine Web-Adresse gesandt, aber klar, ist ja Wochenende. Ich bin weitergekommen, aber habe immer noch ein Problem:
    Wie gesagt, ich habe nun einen Cursor gesetzt für das Positionieren:
    EXEC SQL
    DECLARE CRSCTNO CURSOR FOR
    SELECT
    T01.SHORTN,
    T01.CTNO,
    T01.NAMPA1
    FROM VMKJF25001 T01
    WHERE T01.SHORTN >= :SQL-SHORTN
    FOR FETCH ONLY
    END-EXEC.
    Der funktioniert auch prächtig, d.h. ich bekomme den ersten, der grösser/gleich dem SQL-SHORTN ist.

    Nun muss ich ab dieser Position weiterlesen. Wenn ich nun einen zweiten Cursor für dieses Weiterlesen definiere
    EXEC SQL
    DECLARE NXTCTNO CURSOR FOR
    SELECT
    T02.SHORTN,
    T02.CTNO,
    T02.NAMPA1
    FROM VMKJF25001 T02
    ORDER BY SHORTN
    FOR FETCH ONLY
    END-EXEC.
    bekomme ich durch den ORDER BY den ersten der DB, aber nicht den nächsten von dem, den ich mit dem ersten Cursor gelesen habe.

    Auch wenn ich den zweiten Cursor mit der WHERE analog dem ersten Cursor ergänze, ändert das nichts, er beginnt wieder vom Anfang der DB, so als ob der ORDER "stärker" als der "WHERE" wäre.

    Hättest Du evtl. eine Lösung?

    LG Günter

  3. #27
    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!

  4. #28
    Registriert seit
    Feb 2001
    Beiträge
    20.280
    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

  5. #29
    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

  6. #30
    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 !!!!!

  7. #31
    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..

  8. #32
    Registriert seit
    Aug 2006
    Beiträge
    2.081
    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

  9. #33
    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

  10. #34
    Registriert seit
    Feb 2015
    Beiträge
    19
    Gaaaanz dumme Frage
    Wie gebe ich denn ein neues Thema für das Forum ein????

  11. #35
    Registriert seit
    Feb 2001
    Beiträge
    20.280
    Wähle ein Forum aus (z.B. dieses).
    Bei mir steht dann oben eine dicke Schaltfläche "Thema erstellen".
    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. 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
  •