-
Hello,
irgendwie werde ich das Gefühl nicht los, dass das alles viel einfacher wäre, wenn Du mal Dein konkretes Problem beschreiben würdest....
Zu Deiner letzten Frage:
Die Struktur einer DDS ist ja im Prinzip immer die gleiche.
Also 6 Stellen SourceSequenz, 6 Stellen Datum und 80 Stellen Daten.
Man kann nun ohne Probleme verschiedene Wege angehen, sowas mehr oder weniger variabel zu händeln.
Da wurden hier schon diverse gute Lösungsansätze gebracht.
Wenn Du im RPG eine DDS ansprechen willst, von der Du zur Wandlungszeit nicht den korrekten Namen hast, reicht ein einfaches OVRDBF vorher um den variablen Namen damit auf die im RPG fixierten Anweisungen zu verdrehen.
Das kannst Du entweder vorher per CLP machen oder auch innerhalb des RPG wenn Du die Datei Usercontrolled bearbeitest.
Musst Dir nur das aussuchen, was am einfachsten für Dich ist.
Lass uns doch mal an der konkreten Problematik teilhaben...
k.
-
 Zitat von kuempi von stein
Hello,
irgendwie werde ich das Gefühl nicht los, dass das alles viel einfacher wäre, wenn Du mal Dein konkretes Problem beschreiben würdest....
Zu Deiner letzten Frage:
Die Struktur einer DDS ist ja im Prinzip immer die gleiche.
Also 6 Stellen SourceSequenz, 6 Stellen Datum und 80 Stellen Daten.
Man kann nun ohne Probleme verschiedene Wege angehen, sowas mehr oder weniger variabel zu händeln.
Da wurden hier schon diverse gute Lösungsansätze gebracht.
Wenn Du im RPG eine DDS ansprechen willst, von der Du zur Wandlungszeit nicht den korrekten Namen hast, reicht ein einfaches OVRDBF vorher um den variablen Namen damit auf die im RPG fixierten Anweisungen zu verdrehen.
Das kannst Du entweder vorher per CLP machen oder auch innerhalb des RPG wenn Du die Datei Usercontrolled bearbeitest.
Musst Dir nur das aussuchen, was am einfachsten für Dich ist.
Lass uns doch mal an der konkreten Problematik teilhaben...
k.
Hm also:
Mein Problem ist das ich von einem Programm aus Mithilfe 2er Datenbankdateien eine DDS Datei erzeugen können soll. Ich habe also den Namen der zu erstellenden Datei und die Definitionen(SRCDTA) und muss daraus eine DDS Datei erzeugen.
Bisher hat es sich so rausgestellt das es das beste und einfachste wäre dies über CL und RPG zu machen.
Zzt habe ich noch 2 Probleme.
1. Wie kann ich in RPG die Datei so definieren das ich auf sie zugreifen kann? Weil ich den Namen der Datei auf die ich zugreifen soll übergeben bekomme. ZB.: Ich mache ein
PHP-Code:
ADDPFM FILE(LIB/DDSTEST2) MBR(DDSTEST3)
Auf dieses neue Member will ich zugreifen und in es meine Werte schreiben. Das Problem dabei ist wie gesagt das ich den Namen ja erst übergeben bekomme dh. eine normal Definition ist unmöglich(?).
2. Ich kann meiner Datei:
PHP-Code:
Ausw. Objekt Art Attribut TESTDDS2 *FILE PF-DTA
nicht mit ADDPFM ein neues Member hinzufügen da diese Datei nur ein Member haben darf und ich nicht weiß wie ich das ändern soll.
Ich bin wie gesagt noch ein Neuling auf der i5 bzw beim Programmieren auf der i5.
Vielen Dank für eure Hilfe im Vorraus.
Gruß
Martin
-
Die F-Bestimmung lässt sich nicht variabel gestalten, da der Compiler die richtigen Befehle generieren muss.
Gerade dafür ist ja der OVRDBF konzipiert um die F-Bestimmungen variabel zu nutzen.
-
Die Anzahl der Member kann über CHGPF ... MAXMBR festgelegt werden.
Ansonsten:
PF-DTA ist eine PF die per CRTPF angelegt wurde.
PF-SRC ist eine PF die mittels CRTSRCPF angelegt wurde.
Bei DSPFD tauchen beide als PF auf.
-
Das Ganze kann man auch ohne CL-Befehle (OVRDBF) variabel gestalten. Hier ein Beispiel.
PHP-Code:
fQDDSSRC O F 92 Disk UsrOpn
f ExtFile(MyFile)
f ExtMbr(MyMbr)
*
dQDDSSRCRF DS 92
d SRCSEQ 6A
d SRCDAT 6A
d SRCDTA 80A
*
dMyFile S 21A
dMyMbr S 10A
*
c Eval MyFile = 'LIB/FILE' oder MyFile = 'FILE'
c Eval MyMbr = 'MBR'
c Open QDDSSRC
c Write QDDSSRC QDDSSRCRF
c Close QDDSSRC
Frank Hildebrandt
-
 Zitat von Frank Hildebrandt
Das Ganze kann man auch ohne CL-Befehle (OVRDBF) variabel gestalten. Hier ein Beispiel.
PHP-Code:
fQDDSSRC O F 92 Disk UsrOpn f ExtFile(MyFile) f ExtMbr(MyMbr) * dQDDSSRCRF DS 92 d SRCSEQ 6A d SRCDAT 6A d SRCDTA 80A * dMyFile S 21A dMyMbr S 10A * c Eval MyFile = 'LIB/FILE' oder MyFile = 'FILE' c Eval MyMbr = 'MBR' c Open QDDSSRC c Write QDDSSRC QDDSSRCRF c Close QDDSSRC
Ah vielen Dank für das Beispiel.
-
Danke.
Aber wie müsste die F Bestimmung nach dem OVRDBF dann genau aussehen? Weil den Namen der Datei habe ich ja beim compilieren noch nciht.
-
Hat sich erledigt! Frank war schneller!
Birgitta
-
 Zitat von B.Hauser
Das ist so nicht korrekt!
Solange der Aufbau der verwendeten Dateien bzw. Teil-Dateien identisch ist, kann die Datei variabel gestaltet werden. (Das ist bei sicher Quellen-(Teil-)Dateien der Fall!)
Dazu werden die Schlüssel-Worte EXTFILE und EXTMBR verwendet. In diesen Schlüssel-Worten können die verwendete Datei (sogar qualifiziert mit Bibliothek), sowie die Teil-Datei als Variable hinterlegt werden. Voraussetzung ist allerdings, dass die Datei user controlled geöffnet wird und zwar erst dann, wenn die Variablen entsprechend gefüllt sind.
Damit kann man sich den Override im CL sparen und bekommt auch keine Probleme, sollte man vergessen den OVRSCOPE zu ändern und unterschiedliche Aktivierungs-Gruppen verwenden.
Zur Umwandlungszeit muss eine Datei mit dem in dem F-Bestimmungen angegeben Namen und dem erwarteten Aufbau existieren.
Birgitta
Also müsste ich nur während der Umwandlung eine Datei die so heißt erstellen und könnte sie nach der Kompilierung wieder löschen?
Hm aber warum braucht die Datei einen erwarteten Aufbau wenn es doch eine DDS Datei ist/sein soll. Ich will ja sozusagen ein PF erstellen. (dh SCRDTA = " A fldnam 10A text('testbalbla')" )
Tut mir Leid sollte ich mich oben falsch ausgedrückt habe. Bin heut irgendwie nicht gut drauf.(Kopfschmerzen & Co)
-
Da gibts wohl ein bisschen Begriffsverwirrung:
In einer Source-Datei legt man die Quellbestimmungen ab.
Bei einem CRTPF gibt man diese Sourcedatei wiederum als Quelle mit den Erstellangaben an.
Also:
Du musst deine A-Bestimmungen in eine PF-SRC schreiben um anschliessend mittels CRTPF-Kommando eine DDS-beschriebene Datei erstellen zu können.
Einen direkten Weg gibt es sonst nicht.
Die Alternative ist dann eher SQL, da beim CREATE TABLE der Satzaufbau direkt mitgegeben wird, eine DDS-Quelle also nicht erforderlich ist.
Trotzdem kann eine TABLE-Datei wie eine DDS-beschriebene Datei verwendet werden.
Was deine Umwandlung angeht, so kannst du doch deine CLP-Quelle (QCLPSRC) z.B. als F-Bestimmung angeben.
Ein Löschen der PF-SRC ist nicht erforderlich oder sinnvoll, da du diese sonst vor jeder Umwandlung wieder neu erstellen musst.
-
 Zitat von Fuerchau
Da gibts wohl ein bisschen Begriffsverwirrung:
In einer Source-Datei legt man die Quellbestimmungen ab.
Bei einem CRTPF gibt man diese Sourcedatei wiederum als Quelle mit den Erstellangaben an.
Also:
Du musst deine A-Bestimmungen in eine PF-SRC schreiben um anschliessend mittels CRTPF-Kommando eine DDS-beschriebene Datei erstellen zu können.
Einen direkten Weg gibt es sonst nicht.
Die Alternative ist dann eher SQL, da beim CREATE TABLE der Satzaufbau direkt mitgegeben wird, eine DDS-Quelle also nicht erforderlich ist.
Trotzdem kann eine TABLE-Datei wie eine DDS-beschriebene Datei verwendet werden.
Was deine Umwandlung angeht, so kannst du doch deine CLP-Quelle (QCLPSRC) z.B. als F-Bestimmung angeben.
Ein Löschen der PF-SRC ist nicht erforderlich oder sinnvoll, da du diese sonst vor jeder Umwandlung wieder neu erstellen musst.
Wieder vielen Dank für die freundlich Hilfe.
Nochmal konkret zusammengefasst:
1. Über mein CL Programm mithilfe von crtsrcpf eine Source Datei anlegen.
2. RPG Programm aufrufen und damit die Beschreibungen in die Datei zu schreiben.(F Bestimmung wie oben gesagt?)
3. Zurück im CL Programm das pf-src zu einer pf-dta umwandeln.
Stimmt das dann so? 
Gruß
Martin
-
Noch eine Frage.
Muss ich beim Übergeben von Parametern von CL zu RPG irgendetwas beachten?
Bekomme gerade diesen Fehler:
PHP-Code:
*RNF3776 10 a 001200 Externes Programm im Prototyp für Hauptprozedur ist nicht identisch mit dem Programm, das erstellt wird.
Das ist mein Call:
PHP-Code:
CALL PGM(DDSWRITE) PARM('DDS' 'DDS')
und das mein auffangen der Übergabe.
PHP-Code:
Daufnehm PR EXTPGM('DDSTEST') D field1 21A D field2 10A Daufnehm PI D MyFile 21A D MyMbr 10A
EDIT: Problem behoben.
Es gitb jedoch noch Fehler beim Open...
Similar Threads
-
By homue in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 18-07-07, 16:47
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Squall in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 10-10-06, 08:53
-
By Squall in forum IBM i Hauptforum
Antworten: 31
Letzter Beitrag: 28-09-06, 17:53
-
By Angela in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 22-08-06, 10:11
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