PDA

View Full Version : QDBCRTHA + QDBRUNHA API's



Seiten : [1] 2

Winnilein
08-11-05, 10:43
Hallo!
Es soll ja für den Zugriff auf die DB-Files der AS/400 noch einen weiteren Weg als über die F-Definition mit Chain und Read oder SQL-Statements im RPG-Programm geben.
Und zwar über die API's Create Database Hash (QCreateDatabaseHash) API (http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/qdbcrtha.htm) und
Run Database Hash (QDBRUNHA) API (http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/qdbrunha.htm) .
Leider finde ich NIRGENDWO auch nur ein Beispiel, wie das Funktionieren soll.
Auch die API Beschreibung hierzu von der IBM ist leider das "Allerletzte" !
Hintergrund ist, das ich Infos auf Files Lesen muss, die in x-Bibliotheken liegen, und der OVRDBF --> Open --> Chain --> Close --> DLTOVR für jeden Bib/File das RPG-Programm unheimlich langsam macht.
Wer hatt schon mal was damit gemacht?
Wer kann helfen?
Danke

Fuerchau
08-11-05, 11:06
Diese API's dienen nur einem schnelleren Zugriff mittels HASH-Methoden an Stelle von normalen Indizees und dienen bestimmt nicht deinen Anforderungen.

Was willst du überhaupt erreichen ?
Mit variablen Dateien/Bibliotheken bietet sich da eher dynamisches SQL an.

Winnilein
08-11-05, 11:16
In 60 Bibliotheken(je Filiale eine) liegt jeweils ein Bestandsdatei.
Keyfeld ist die Artikelnummer. Nun möchte ich in einem Programm
nach Eingabe der Artikelnummer die Bestände der einzelnen Filialen
in einem Subfile anzeigen und der kummuluierten Bestand in einem seperaten Feld.
Der Vorläufer dieses Programmes, der leider nicht die aktuellen Daten, sondern nur die Eingefrohrenen Daten des Vortages anzeigt(So ein Blödsinn!!) wir zur Zeit etwa 20000!!! Mal aufgerufen.
Wie bereits beschrieben ist die Methode mit OVRDBF im Programm sehr Recourcenfressend. Mein Test mit einem SQLRPGLE-Programm brachte auch keine Vorteile.

Fuerchau
08-11-05, 11:27
Wenn die Daten sowieso statisch sind, kopiere diese doch alle in eine Datei mit Key Filiale/Artikel.
Auch das lässt sich automatisieren, da mittels DSPOBJD in Outfile alle Dateien ermittelbar sind und einfach ein CPYF in eine neue Bestandsdatei zusammenzuführen sind.

Ansonsten kann ich nur sagen: sch... Konzept der DB. ;)

Winnilein
08-11-05, 11:37
1. Sind die Daten nicht statisch.

2. Waren das bis vor einem Jahr 60! einzelne AS/400.

3. Würde ich ja gern die 60 Bestandsdateien in eine einzige zusammenführen, ist aber leider zur Zeut nicht möglich.

RobertPic
08-11-05, 11:55
Die beste Performance müsste man mMn mit einem SELECT erreichen, welcher mittels UNION alle SELECT's verknüpfen.

Man könnte diesen SELECT auch in ein QM-Query packen und in die Ausgabe in eine Datei umleiten und dann mit dieser Datei umleiten.

Wenn die Firmen nicht fix im Statement stehen sollen, könnte man sich das QM-Query bzw. das Sourcefile dazu von einem Programm erstellen lassen.

Hier ein Beispiel SELECT



SELECT 1 as Firma, ARTNR FROM FIR1LIB/ARTSTM WHERE ARTNR =
199999 UNION ALL SELECT 2 as Firma, ARTNR FROM FIR2LIB/ARTSTM WHERE
ARTNR = 199999


Robert P.

Pikachu
08-11-05, 12:07
Hallo!

Du könntest versuchen, mehrere physische Dateien mittels einer logischen Datei zusammenzufassen (http://publib.boulder.ibm.com/pubs/html/as400/v5r1/ic2929/info/rzakb/rzakbmst61.htm).

Viele Grüße
Jürgen

Winnilein
08-11-05, 12:12
Geht nicht, die Dateien haben leider alle den gleichen Satzformatnamen.

Fuerchau
08-11-05, 12:21
Die Anzahl der LF's bzw. UNION-Selects sind leider beschränkt (ich glaube so um die 32, was bei V5R3 etwas erweitert wurde).
Eine Multi-Format-LF geht da auch nicht, da auch hier nur 32 Dateien erlaubt sind.

Es bleibt also nur die Tipparbeit tatsächlich 60 Selects zu kodieren, da damit ja die Lib qualifiziert angegeben werden kann:
select f1, f2, ... into :myf1, :myf2, ... from mylib/myfile where artikel=:myartikel
Ein Cursor ist da nicht erforderlich, da ja max. nur 1 Satz gelesen wird.

Pikachu
08-11-05, 12:47
Hallo!

Eine Möglichkeit wäre vielleicht noch, mittels CPYF mit Feldtest (Parameter INCREL, alphanumerischer Vergleich) die jeweiligen Datensätze nach Eingabe der Artikelnummer aus den physischen Dateien in eine einzige physische Arbeitsdatei zu kopieren. In dieser Datei wären dann nur die entsprechenden Datensätze des ausgewählten Artikels vorhanden.

Viele Grüße
Jürgen