-
Also wir haben V5R3M0, die Ausgabedatei die über DSPFFD erstellt wurde hat die Felder nicht
-
Vielleicht wurden sie wegoptimiert? Unter V5R2 sind sie noch da. Wie machst du den DSPFFD? Ist die Ausgabedatei vielleicht bereits vorhanden?
-
Nein ist noch nicht da.
Aber das mit dem wegoptimieren hört sich aber etwas grausam an. Es kann ja wohl nicht sein daß Felder im nächsten Release auf einmal nicht mehr da sind. Dann gute Nacht für alle die diese Felder verwenden.
Aber nochmals bitte auf das Ursprüngliche konzentrieren ;-)
Das mit dem DSPFFD soll nur die letzte Möglichkeit sein und ist auch intern gar nicht abgesegnet. Eigentlich sollte es über die Prozedur welche das API beinhaltet laufen. Wie ich oben bereits geschrieben habe funktioniert dies auch bis zu dem Punkt wo die Bildschirmdatei zu groß wird und das was das API zurückgibt nicht in eine Variable passt. Deshalb nochmals meine Frage. Gibt es irgendeine Möglichkeit wie ich die Feldlänge länger als 65535 mache.
-
Da kann man sich ggf. mit Pointern helfen:
D MyApi DS
D Field1 ....
:
D FieldN ...
D MyPtr s *
D MyDs ds based(MyPtr)
Da die Struktur der einzelnen Elemente ja immer die selbe Länge aufweist, kann man sich die Adresse des Elements ja ausrechnen:
eval MyPtr = %addr(FieldN) + (N - 1) * %size(MyDs);
So kann man sich dann von Eintrag zu Eintrag in einer Schleife durchhangeln.
-
 Zitat von Fuerchau
Da kann man sich ggf. mit Pointern helfen:
D MyApi DS
D Field1 ....
:
D FieldN ...
Das denke ich habe ich probiert.
Ich denke Field1 ... FieldN machst Du alle 65535 groß. Aber da liegt der Hund begraben.
Ich habe es wie folgt definiert
PHP-Code:
D RcvVar ds d Dummy1 65535 d Dummy2 65535
Und dann bringt er mir bei der Umwandlung folgenden Fehler:
PHP-Code:
Msg-ID Sv Nummer Folge Nachrichtentext RNF0501 20 68 006800 Länge des Zeicheneintrags RCVVAR überschreitet 65535; für die Länge wird standardmäßig 65535 angenommen.
Oder ich habe was an Deiner Ausführung falsch verstanden
-
Nein, so meine ich das nicht.
"MyAPI DS" beschreinb ja die Struktur des API's. Meistens gibt es dann einen Verweis auf die Einträge, z.B.:
D MyAPI DS
:
:
D NumEntry 10I 0
D RelPosEntry 10I 0 <= Je nach API
D FirstEntry
D :
D :
D MyPtr S *
D MyEntry DS based(MyPtr)
D* Beschreibung des enzelnen Eintrages
D Ind S 5I 0
for Ind=1 to NumEntry;
MyPtr = %addr(FirstEntry) + (Ind-1) * %size(MyEntry);
endfor;
Der Vor- bzw. Nachteil ist, dass durch Pointerarithmetik auch auf Speicher zugegriffen werden kann, der im Programm nicht definiert ist.
Daher ist dies mit Vorsicht zu geniessen, man muss sich im Klaren sein, worauf man zugreift.
Anderes Beispiel:
D MyParam DS
D Filler 1A
D MyPtr S *
D MyWork DS based(MyPtr)
D Field 10A
C *entry plist
C parm MyParam
C eval MyPtr=%addr(MyParam)
Durch die Definition der Struktur MyWork kann ich somit auch auf nicht definierte Bereiche zugrefen. Dies ist genaus, wie das zu lange definieren von Parametern, die so gar nicht übergeben werden.
Der Compiler und die Runtime bieten da überhaupt keinen Schutz.
-
OK ich seh schon. Ich werd dann wohl doch auf den DSPFFD zurückgreifen. Im übrigen ist die Zeile und Spalte aufgetaucht . Anscheinend hat es die Datei doch schon länger gegeben. Ich dachte die wäre neu.
-
Nunja, aus Performancegründen wäre das API auf jeden Fall schneller, und so kompliziert ist das mit den Pointern doch gar nicht.
-
Nix gegen Dich aber ich verstehs nicht. Wahrscheinlich aber auch weil mir im Moment der Kopf raucht.
Also im Moment habe ich für mich den Kompromiss geschlossen es mal zu lassen wie es ist.
Die ersten Formate mit den vielen Feldern liegen noch innerhalb des 65535-Bereichs. Und bei den nachfolgenden Subfiles habe ich Bezugszahlen verwendet. Jetzt bete ich nur daß niemand auf die Idee kommt die Subfiles in der Quelle vor die Formate zu kopieren. Wenn ich dann etwas mehr Zeit habe werde ich entweder Dein (Fuerchau) Vorschlag genauer unter die Lupe nehmen oder halt einfach beim Programmstart einen DSPFFD ausführen. Das es ist wie es ist nervt aber schon ein bischen.
Tausend Dank an Euch alle.
Viele Grüsse Harald
-
Noch eine Frage.
Es gibt doch so viele Dateien in denen die Systeminformationen abgelegt sind. Gibt es nicht auch eine für die Feldbeschreibung ?
-
Welche meinst du denn ?
a) DSPFFD gilt auch für PF/LF
b) PF/LF kann man per SQL aus QSYS2/SYSCOLUMNS laden
c) Auch dafür gibts natürlich wieder ein API
Similar Threads
-
By kuempi von stein in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 28-11-06, 05:48
-
By Weki in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 23-10-06, 11:40
-
By asb_salem in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 21-03-06, 13:32
-
By GEGE in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-02-05, 07:45
-
By chr in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 12-02-01, 15:55
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