-
SQL wiederaufrufen des Programmes
Hallo,
ich habe mir ein kleines SQL Prog geschrieben um festzustellen ob es die Eingabe des Users auch wirklich gibt. Beim 1. Aufruf des Prog. klappt alles wunderbar nur wenn ich beim 1. Aufruf einen falchen Wert eingebe und danach einen Richtigen, der funktioniert wenn ich ihn zuerst eingebe, bekomme ich wieder SQLCOD=100 obwohl es den Wert ja gibt. Was mache ich falsch?
Mein Code:
PHP-Code:
H DftActGrp(*NO) ActGrp(*CALLER) H alwnull(*USRCTL) /COPY LIB/FILE,DAVCOPY DAUFNEHM PR EXTPGM('DAVSQL01') D PARM1 likeds(DAV) D PARM2 1A D PARM4 like(SQLCOD) D PARM5 LIKE(SQLSTT) DAUFNEHM PI D DAVDS likeds(DAV) D fcall 1A D SQLC LIKE(SQLCOD) D SQLS LIKE(SQLSTT) C eval SQLCOD=0 C eval fcall='J' C/EXEC SQL C+ Declare MyCsr Cursor for C+ Select FIRKEN From LIB/FILE Where FIRKEN = :DAVDS.FIRKEN C/End-Exec C/EXEC SQL C+ Open MyCsr C/END-EXEC C C/EXEC SQL C+ Fetch MyCsr C+ into :DAVDS C/END-EXEC C if SQLCOD = 100 C or SQLCOD < *ZEROS C eval fcall='E' C eval *inlr=*on C return C elseif SQLCOD<>0 AND SQLCOD<>100 AND SQLCOD<>326 C eval fcall='F' C eval SQLC=SQLCOD C eval SQLS=SQLSTT C eval *inlr=*on C return C endif C/EXEC SQL C+ Close MyCsr C/END-EXEC C eval *inlr=*on C return
Gruß Martin
-
Hallo Martin,
ich vermute, dass der Fehler darin liegt, dass der SQL-Cursor nicht geschlossen wird. Durch den Return-Befehl in der if-Bedingung wird die close-Bestimmung für den Cursor nicht ausgeführt.
Du solltest den Cursor schliessen und das Problem sollte behoben sein.
Gruß
Alexander
-
Cursor in diesem Fall überflüssig?
Hallo Forum,
ist der SQL-Cursor in diesem Fall nicht überflüssig? Da es sich um einen single-row-fetch handelt, kann Martin doch auf den Cursor verzichten und sein Problem tritt auch nicht mehr auf, oder?
Gruß
Alexander
-
Zitat von zannaleer
Hallo Martin,
ich vermute, dass der Fehler darin liegt, dass der SQL-Cursor nicht geschlossen wird. Durch den Return-Befehl in der if-Bedingung wird die close-Bestimmung für den Cursor nicht ausgeführt.
Du solltest den Cursor schliessen und das Problem sollte behoben sein.
Gruß
Alexander
Ohje manchmal sieht man die einfachsten Dinge nicht. Danke!
-
Hallo Martin,
ich habe gerade mal ein paar unserer Sourcen durchgesucht. Du kannst, wenn sichergestellt ist, dass nur ein Satz beim select gefunden wird, auf den Cursor verzichten.
Müsste dann so aussehen:
Code:
Select FIRKEN into :DAVDS From LIB/FILE Where FIRKEN = :DAVDS.FIRKEN
Dann brauchst Du Dir keine Gedanken über einen offenen oder geschlossenen Cursor machen.
Gruß
Alexander
-
Hallo Alexander
danke für die Information, das Programm läuft jetzt auch gut, seitdem der Fehler mit dem Cursor entdeckt wurde. Aber es ist gut zu Wissen das sowas auch geht.
Gruß Martin
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By ZakOyten in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 19-04-06, 11:49
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks