View Full Version : api.QDBRTVFD: PFs einer LF oder Join-LF
Paul Gilbert
27-04-12, 17:11
Hallo Forum,
bevor ich komplett verzweifle ..wieder einmal der Weg zu den Fachleuten. Ich habe mir heute die Zähne an dem o.a. API ausgebissen ... und bin ohne Erfolgserlebnis (bisher) ina WE gegangen. Aber es lässt mir keine Ruhe.
Ziel: ich möchte per api die abhängigen PFs zu einer definierten LF bzw. Join-LF ermitteln. Ergebnis soll sein wie mit DSPFD *MBR LF nach outfile.
Wenn ich den IBM-Text richtig verstehe, muss ich per FILD0100 im File Def Header in Feld Qdbflbnum (auf 15) die Anzahl der Member haben. Habe ich (=3).
Um die Namen der 3 Dateien zu bekommen, müsste ich in der Scope Array die Werte (Based on ...) finden.
Dazu hole ich den Offset aus dem FDT Feld Qdbfos.
Im Debug stelle ich aber fest, Feld ist Zero.
Wo denke ich falsch? Hat jemand vll ein Beispiel? Wäre sehr dankbar und das WE wär' gerettet.
Danke, ein schönes WE
Paul
Da hast du das mit Abstand komplizierteste API rausgesucht.
Ggf. ist deine Empfängervariable einfach zu klein, so dass bestimmte Informationen dadurch nicht bereitgestellt werden.
Length of receiver variable
Aber wenn du nur die Abhängigkeiten brauchst, ist dieses API vielleicht einfacher:
List Database Relations (QDBLDBR) API (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/apis/qdbldbr.htm)
Um auf USRSPC's zuzugreifen benötigst du noch die USRSPC-API's. Wenn du dich mit Pointern auskennst kannst du auch per Pointer auf den USRSPC zugreifen.
Paul Gilbert
28-04-12, 09:27
Moin moin, danke für die Info.
Stimmt, QDBRTVFD ist schon der Hammer.
Mit den anderen APIs (usrSpc & Co) kenne ich mich schon ganz gut aus.
Die Länge kann's nicht sein. Wenn ich's mit einer PF mache, steht im SCOPE die korrekte Info.
DBR bringt mir nichts, weil ich den anderen Weg brauche: nicht von PF alle abhängigen LFs sondern alle in einer LF zugeordneten PFs. Das geht wunderbar mit DSPFD *MBR OUTFILE. Ich will aber nicht erst ne temp.File etc, sondern ... eben den harten Weg.
Danke und schönes WE
Paul
Laut Doku verweist das eher auf IDDU (wer immer das noch nutzt).
Ich denke, bei LF's musst du auf die LF-Attributes und von dort auf die Join-Specifications gehen.
Ist die nicht vorhanden, ist es eine einfache LF.
Paul Gilbert
28-04-12, 11:11
das klappt alles wunderbar. lf-/join-attribute ist alles ok.
im header ist es das Feld Qdbfos = Offset from the start of the FDT header, Qdb_Qdbfh, to the file scope array, Qdbfb.
es gibt diverse Array sections (zb keys / selects etc). so eben auch die scope. ich hab mich einfach an dem text orientiert:
Non-join logical files have one entry for each based on physical file. The entry names the based on physical file and describes the logical file record format to use with that file.
Join logical files have one entry for each based on physical file. The entry names the based on physical file. Only the first entry describes the logical file record format.
Ich finde es zwar super gut, dass wir hier am we über dieses ibm-chaos-api sprechen ... aber es gibt bestimmt besseres ... zumal ich Mittwoch (mo = Brücke) dann im Büro direkt an der Kiste sitze und nerve.
also .. danke für die prompte Unterstützung. Ich bleib da am Ball, wär' ja gelacht ...
btw: unsere amerikanischen Kollegen haben irgendwo (google) einen Hinweis auf Unstimmigkeiten in der Formatbeschreibung. Kann ja auch sein, dass die Position falsch ist. Wenn die den Wert der Scope-Werte Debugger, sieht es ... krumm aus.
Mittwoch mehr. Danke und Gruß
(Gut, dass es dieses Forum gibt)
Manchmal hilft mir bei API's halt der Debugger und der Windowsrechner im Hex-Modus.
Wenn die Empfängervariable groß genug ist, kann ich mir Inhalte ab einer Position und in Hex anzeigen. Die relativen Adressen per Calc.Exe in dezimal umwandeln und weiter per "eval" durchhangeln.