-
Embedded SQL mit Update
Bei meinem erten sql mit update werden die Felder nicht aktualisiert.
Der Select funktioniert und die UF-Felder werden mit den gewünschten Daten gefüllt. Aber die Dateifelder behalten ihren Ausgangewert.
Das Programm wurde mit commit *none umgewandelt.
Es kommt zu keiner Fehlermeldung.
Was hbe ich übersehen?
C UPDIN BEGSR
C************************************************* ***************
C/EXEC SQL
C+ Declare upzeig cursor for
C+ select prkhs, prfir, prdtjj, prdtmm, prdtdd, prart, przah,
C+ prsts, prsa, prtxt, prpro, prwer, prbis, prspe
C+ from preipf
C+ where prkhs = :cmnr and prfir = 3
C+ order by prfir, prart, przah
C/END-EXEC
C MOVE *ZEROS UFKHS 70
C MOVE *BLANKS UFTXT 70
C MOVE *BLANKS UFSTS 1
C MOVE *BLANKS UFSPE 1
C MOVE *ZEROS UFFIR 20
C MOVE *BLANKS UFSA 3
C MOVE *ZEROS UFDTMM 20
C MOVE *ZEROS UFDTDD 20
C MOVE *ZEROS UFDTJJ 40
C MOVE *ZEROS UFART 40
C MOVE *ZEROS UFZAH 30
C MOVE *ZEROS UFPRO 52
C MOVE *ZEROS UFWER 92
C MOVE *ZEROS UFBIS 92
C/EXEC SQL
C+ open upzeig
C/END-EXEC
C SQLCOD DOWNE100
C/EXEC SQL
C+ fetch upzeig into :ufkhs,
C+ :uffir, :ufdtjj, :ufdtmm, :ufdtdd, :ufart, :ufzah,
C+ :ufsts, :ufsa, :uftxt, :ufpro, :ufwer, :ufbis, :ufspe
C/END-EXEC
C SQLCOD CABEQ100 EUPD
C SELEC
C PRART WHEQ 10
C Z-ADDBKDA UFPRO
C Z-ADDBUEP UFWER
C HEUTE CAT USER UFTXT
C UFART WHEQ 101
C Z-ADDBAOP1 UFWER
C Z-ADDBAOHB1 UFBIS
C Z-ADDBPROV1 UFPRO
C MOVE BAUSL1 UFSTS
C ENDSL
C/EXEC SQL
C+ update preipf
C+ set PRPRO = :UFPRO, PRWER = :UFWER, PRBIS = :UFBIS,
C+ PRTXT = :UFTXT, PRSA = :UFSA,
C+ PRSTS = :UFSTS
C+ where current of upzeig
C/END-EXEC
C ENDDO
C EUPD TAG
C/EXEC SQL
C+ close upzeig
C/END-EXEC
C************************************************* ***************
C ENDSR
-
Du musst den Select anpassen:
C/EXEC SQL
C+ Declare upzeig cursor for
C+ select prkhs, prfir, prdtjj, prdtmm, prdtdd, prart, przah,
C+ prsts, prsa, prtxt, prpro, prwer, prbis, prspe
C+ from preipf
C+ where prkhs = :cmnr and prfir = 3
C+ order by prfir, prart, przah
C+ for update
C/END-EXEC
-
Es geht allerdings auch einfacher, z.B.:
update preipf
set
prpro = (case prart when '10' then :bkda else prpo end)
,ufwer = (case prart when '10' then :buep else ufwer end)
,.....
where prkhs = :cmnr and prfir = 3
analog dann für alle weiteren Felder.
Das geht schneller und auch übersichtlicher.
-
 Zitat von Fuerchau
Du musst den Select anpassen:
C/EXEC SQL
C+ Declare upzeig cursor for
C+ select prkhs, prfir, prdtjj, prdtmm, prdtdd, prart, przah,
C+ prsts, prsa, prtxt, prpro, prwer, prbis, prspe
C+ from preipf
C+ where prkhs = :cmnr and prfir = 3
C+ order by prfir, prart, przah
C+ for update
C/END-EXEC
werde ich sofort probieren
ich hatte ein Beispiel aus alten Unterlagen der Zusatz nicht drin ist.
-
For Update erkennt der Compiler als fehlerhaft.
Ich versuche die Felder für 35 Datensätze zu ändern und wollte statt einer RPG- Schleife Sql verwenden (auch zur Übung).
Wegen der übersicht hab ich die meisten when statements gelöscht.
-
 Zitat von Bernd Wiezroek
.
Es kommt zu keiner Fehlermeldung.
Das stimmt so nicht! Du müsstest bei dem UPDATE-statement den SQLCOD -510 erhalten: Cursor &1 für Datei &2 schreibgeschützt.
Wird ein Cursor ohne ORDER BY-Kausel definiert, können Datensätze ohne Angabe der FOR UPDATE OF Klausel fortgeschrieben werden.
Der Datensatz wird beim Einlesen nur dann gelockt, wenn im Programm ein Update auf den Cursor mit WHERE CURRENT OF vorhanden ist.
Wird eine ORDER BY-Klausel im Declare-Statement angegeben, gilt der CURSOR als Read Only, es sei denn die FOR UPDATE OF wird angegeben.
Bei der FOR UPDATE OF Klausel müssen alle Felder, die geändert werden sollen durch Kommata getrennt aufgelistet werden.
Werden nicht alle Felder aufgelistet, ist der UPDATE nicht erfolgreich.
Noch ein Tipp frage nach jedem SQL-Statement entweder SQLCOD oder SQLSTT ab, um festzustellen ob ein Fehler aufgetreten ist.
PHP-Code:
C/EXEC SQL
C+ Declare CsrOrdH dynamic scroll Cursor WITH HOLD for
C+ Select Order_Number, Order_Total
C+ from Order_Header
C+ where Order_Number between :FirstOrderNo and :LastOrderNo
C+ and Year(Order_Date) = :PrevYear
C+ Order by Order_Number
C+ For Update Of Order_Total, Order_Date
C/End-Exec
C/EXEC SQL Close CsrOrdH
C/END-EXEC
C/EXEC SQL Open CsrOrdH
C/END-EXEC
C DoU SQLSTT = '02000'
C/EXEC SQL
C+ Fetch next from CsrOrdH
C+ into :OrderNo, :OrderTotal
C/END-EXEC
C/EXEC SQL
C+ update Order_Header
C+ Set Order_Total = :OrderTotal
C+ Order_Date = :OrderDate
C+ where Current of CsrOrdH
C/END-EXEC
Birgitta
-
Das War die Lösung das Order by ist im Beispiel nicht drin. Den Sqlcod hatte ich nicht überwacht. Jetzt kann ich das Programm vernünftig machen.
Vielen Dank für die Hilfe.
-
SQLRPG CONNECT FEHLER bei LOKALE UND REMOTE/DATEIEN
Ich möchte Sätze aus Maschine A in einer Datei in Maschine B inserieren mit dem Befehl INSERT.
Beim CONNECT habe ich Probleme. Maschine A ist Lokal , Maschine B ist Remote .
Wie kann ich CONNECT steuern ?
Wenn ich Interaktive SQL aufrufe, habe ich richtiges Ergebnis, aber bei Embedded-Sql läuft es nicht
Ich deklariere beie Dateien,
mach CONNECT auf Lokal,open und fetche die Felder der Lokalen dateien, aber immer Fehler CONNECT ALREADY EXIST
Muss ich auf explicite CONNECT LOKALDB verzichten oder was soll ich machen ?
CONNECT TO LOKALDB
dann kommen logische Bearbeitung und mache so ein EXSR INSERT, da mache ich wieder CONNECT TO REMOTEDB, es klappt nicht.
Kann mir jemand sagen, wie man CONNECT AUF LOKALDB macht, wo man Ursptungsdatei Liest und die Sätze in die REMOTEDATEI übeträgt vorgeht ? Bin neu mit Embedd-SQLRPG
-
Hallo,
an die lokale Maschine darfst du nicht connecten, das ist abgeklemmt damit das nicht etwa im Server Job läuft (CFINT lässt grüssen), deshalb wirst du automatisch connected.
An die remote Maschine B musst du connecten.
Es ist immer nur eine Connection aktiv (schließlich sagst du bei der SQL Operation ja nicht an welche Büchse du dich wendest)-
Connections werden mit SET CONNECTION geswitcht.
Du musst also zwischen lesen und schreiben jeweils switchen.
Etwas eleganter müsste das eigentlich mit zwei Activation Groups gehen, sprich zwei ILE Modulen in getrennten Serviceprogrammen mit jeweils eigener Activation Group. Serviceprogramm A arbeitet lokal in Activation Group A; Serviceprogramm B connected remote an B und läuft in der Activation Group B. (Hoffentlich wird dem maroden PreCompiler hierbei nicht schwindelig).
Die beiden Zugriffsmodule werden dann von dem Programm mit der steuernden Logik verwendet und die lese- bzw. schreib Procedures aufgerufen. Dazu müssen dann die beiden Serviceprogramme in das steuernde Programm gebunden werden.
mfg
Dieter Bender
 Zitat von polo
Ich möchte Sätze aus Maschine A in einer Datei in Maschine B inserieren mit dem Befehl INSERT.
Beim CONNECT habe ich Probleme. Maschine A ist Lokal , Maschine B ist Remote .
Wie kann ich CONNECT steuern ?
Wenn ich Interaktive SQL aufrufe, habe ich richtiges Ergebnis, aber bei Embedded-Sql läuft es nicht
Ich deklariere beie Dateien,
mach CONNECT auf Lokal,open und fetche die Felder der Lokalen dateien, aber immer Fehler CONNECT ALREADY EXIST
Muss ich auf explicite CONNECT LOKALDB verzichten oder was soll ich machen ?
CONNECT TO LOKALDB
dann kommen logische Bearbeitung und mache so ein EXSR INSERT, da mache ich wieder CONNECT TO REMOTEDB, es klappt nicht.
Kann mir jemand sagen, wie man CONNECT AUF LOKALDB macht, wo man Ursptungsdatei Liest und die Sätze in die REMOTEDATEI übeträgt vorgeht ? Bin neu mit Embedd-SQLRPG
-
: : Es sollen Daten die auf einer Produktionsmaschiene vorliegen in eine andre Maschieren geschrieben werden.
Die Verbindung besteht schon.
Embeded-SQL-Befehlen aufrufen.
In diesem Programm wird der CONNECT zur fernen AS400-Datenbank gemacht.
Ein INSERT und ein UPDATE funktioniert auch schon in einer interaktiven Anweißung.
Aber ich habe das Problem.
Ich kann Embeded-SQL nicht und weis auch nicht wie man das macht.
Nun bekomme ich den Fehler SQLSTATE 01532
Ich mache CONNECT nur auf Remote. Deklariere Lokal-DB, mache OPEN, mach auch FETCH in Schleife dann sage ich EXSR VERARBEITE, niet, es klappt nicht. Es kommt so eine Meldung DB2 Multisystem fehlt oder CRTNODGRP. Bitte um Hilfe
Wer kann mir sagen wie ich Sätze auf Datei A in DateiB(Remote-Datei inserieren kann) ?
-
Hallo,
das Minimum, das ich von einem Frager erwarte ist, dass er die Antwort zumindest liest; sonst verschwnedet der Antworter lediglich seine Zeit, wozu ich keine Lust habe.
mfg
Dieter Bender
 Zitat von polo
: : Es sollen Daten die auf einer Produktionsmaschiene vorliegen in eine andre Maschieren geschrieben werden.
Die Verbindung besteht schon.
Embeded-SQL-Befehlen aufrufen.
In diesem Programm wird der CONNECT zur fernen AS400-Datenbank gemacht.
Ein INSERT und ein UPDATE funktioniert auch schon in einer interaktiven Anweißung.
Aber ich habe das Problem.
Ich kann Embeded-SQL nicht und weis auch nicht wie man das macht.
Nun bekomme ich den Fehler SQLSTATE 01532
Ich mache CONNECT nur auf Remote. Deklariere Lokal-DB, mache OPEN, mach auch FETCH in Schleife dann sage ich EXSR VERARBEITE, niet, es klappt nicht. Es kommt so eine Meldung DB2 Multisystem fehlt oder CRTNODGRP. Bitte um Hilfe
Wer kann mir sagen wie ich Sätze auf Datei A in DateiB(Remote-Datei inserieren kann) ?
-
 Zitat von BenderD
Hallo,
das Minimum, das ich von einem Frager erwarte ist, dass er die Antwort zumindest liest; sonst verschwnedet der Antworter lediglich seine Zeit, wozu ich keine Lust habe.
mfg
Dieter Bender
Finde das du ihm eine eindeutige Lösung aufgezeigt hast , wenn er nicht genügent vom Programmieren weiß solte er es sich aneignen.
Die nochmalige wiederholung seiner Frage läßt darauf schließen das er ein kompletes Program Script haben möchte.
mfg
Similar Threads
-
By Squall in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 18-10-06, 12:01
-
By wuwu in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-07-06, 15:31
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By e_sichert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-05-06, 10:47
-
By Zupfl50 in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 06-10-04, 21:04
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