PDA

View Full Version : OVRDBF - wer knackt die Nuss?



Seiten : [1] 2

beo
02-05-03, 17:14
OVRDBF
FILE(MUSTER) TOFILE(*LIBL/MM) MBR(MEMBER01)

OVRDBF
FILE(MUSTER) TOFILE(*LIBL/PP) MBR(MEMBER99)

Wie du siehst sind die 2 OVRDBF Befehle unterschiedlich.

In meinem Programm wird die Datei MUSTER als Input File gelesen. Tatsächlich kommen die Daten jedoch aus anderen Dateien und Teildateien mal aus MM, PP, oder anderen Dateien.
Der Aufbau von allen Dateien in gleich.
Es soll aber nur ein Programm geben und nicht für jede Datei ein eigenen Programm.

Wie kann man dieses in RPGLE realisieren?

B.Hauser
02-05-03, 18:45
Hallo,

soll Dein Programm je nach bedarf eine einzelne Datei bzw. Member verarbeiten, oder müssen gleichzeitig mehrere Dateien-/Member im Zugriff sein?

In RPGIV gibt es ab Release V5R1M0 Schlüssel-Worte in den F-Bestimmungen EXTFILE und EXTMBR, mit dem Du zur Laufzeit Deine Datei und Member angegeben kannst.

Die Datei darf erst geöffnet werden, wenn die Datei bzw. das Member feststeht.
Wird der Datei- / Member-Name als Parameter übergeben und das Programm mit *INLR beendet, sind keine weitere Aktionen in den F-Bestimmungen erforderlich.

Ansonsten muss die Datei mit USROPN definiert werden.
Sobald der Datei- und Member-Name feststeht, kann die Datei OPEN geöffnet werden.
Soll eine andere Datei/Member verarbeitet werden, wird die Datei zunächst über CLOSE geschlossen und anschliessend mit dem neuen Namen geöffent.

Solltest Du noch kein V5R1M0 haben, kannst Du das gleiche Spiel mit OVRDBF und QCMDEXC machen.
(Die Dateien dürfen erst geöffnet werden, wenn die OVRDBFs erfolgt sind)

Du musst beim OVRDBF nur auf den Parameter OVRSCOPE achten. Der Unterlassungs-Wert ist *ACTGRPDFN.
Wenn Du mit Aktivierungs-Gruppe *NEW arbeitest, solltest Du die DBFOVR auf Job oder Aufruf-Ebene ausführen.

Birgitta

beo
05-05-03, 17:56
Hallo Birgitta,
vorab sage ich merci für Deine schnelle Antwort.

Die Datei und Member ist vor dem open bekannt. Den OVRDBF habe ich vor dem Programmaufruf ausgeführt, der open aus dem RPG Programm für die Datei erfolg also NACH dem OVRDBF.

Es soll nur ein Member der Datei verarbeitet werden, welches ist jedoch nicht bekannt. Es müssen alle Members nach einander verarbeitet werden.

Gruss Beo

Fuerchau
06-05-03, 11:42
Mittels RTVMBRD kann die Liste der Teildateien einer Datei abgerufen werden.
Ich kann also in einer Schleife jede Teildatei nacheinander mittels OVRDBF und CALL verarbeiten.

Ist keine Teildatei mehr vorhanden, wird ein CPF-Fehler gemeldet, den ich mit MONMSG abfangen kann.

Die F1-Hilfe des Kommandos ist ganz gut zu verwenden.

Die 2. Möglichkeit ist mittels
DSPFD FILE(MYLIB/MYFILE)
TYPE(*MBRLIST)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/MYMBR)
die Liste der Teildateien zu erstellen und anschließend per DCLF und RCVF in einer Schleife die Teildateien abzuarbeiten.

B.Hauser
06-05-03, 11:59
Noch eleganter ist die Lösung über APIs.

Über API QUSLMBR (List Database File Members) können die Namen der Teil-Dateien in einen Userspace geschrieben, und von dort ausgelesen werden.

Die Verarbeitung über API und Userspace ist schneller als über CL-Befehle mit Datei-Ausgabe.

Birgitta

beo
06-05-03, 12:36
ich habe ein API Handbuch mit einigen APIs jedoch fehlt mir das API. Wo finde/bekomme ich das API?

Beo

beo
06-05-03, 12:42
Den Vorschlag von Fuerchau habe ich schon vorher verwendet. Der Funktionsiert aber nicht!
Weil ich in meinem RPG Prog. in den F Best. die Datei AA mit Satzformart AAR habe. Es kommen jedoch ca. 50 weitere Dateien und verschiedenen Membern. Der Satzaufbau ist jedoch überall gleich, der einzige Unterschied ist der Dateiname und das Satzformat.

Wenn ich das Programm so laufen lasse kommt die Fehlermeldung Satzformat AAR in Datei xxx nicht gefunden.


<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von Fuerchau:
Mittels RTVMBRD kann die Liste der Teildateien einer Datei abgerufen werden.
Ich kann also in einer Schleife jede Teildatei nacheinander mittels OVRDBF und CALL verarbeiten.

Ist keine Teildatei mehr vorhanden, wird ein CPF-Fehler gemeldet, den ich mit MONMSG abfangen kann.

Die F1-Hilfe des Kommandos ist ganz gut zu verwenden.

Die 2. Möglichkeit ist mittels
DSPFD FILE(MYLIB/MYFILE)
TYPE(*MBRLIST)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/MYMBR)
die Liste der Teildateien zu erstellen und anschließend per DCLF und RCVF in einer Schleife die Teildateien abzuarbeiten.[/quote]

B.Hauser
06-05-03, 13:17
Hallo,

APIs und deren Beschreibung findest Du in der AS/400 Online Library unter: http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm
(Programming --> APIs)

Dein eigetliches Problem, ist das Satz-Format, das bei jedem Member unterschiedlich sein kann.
Bei gleichem Aufbau ging ich davon aus, das auch das Satz-Format gleich ist.

M.E. hast Du nur eine Chance:
Mittels OVRDBF Datei und Member zu überschreiben.
Im RPG-Programm die überschriebene Datei mittels embedded SQL verarbeiten.

Birgitta

rolf
06-05-03, 13:17
Ich würde dann noch beim OVRDBF den Parameter OVRSCOPE(*CALLLVL) angeben, damit sich der Override auch auf ein RPG-Programm in einer anderen Activationgroup bezieht.
Gruss
Rolf

beo
06-05-03, 15:46
Rolf,
danke auch für Deinen Vorschlag, doch leider funktioniert das auch nicht! Das Programm tut jetzt so als wenn es die Datei verarbeiten würde doch es wird NICHT Datei vom OVRDBF genommen sondern der Dateiname der in den F-Best. im RPGLE Prog steht.

Wenn ich das API verwende habe ich die Datei mit allen Membern, bis hier ist alles klar. Doch wie kann ich die verschiedenen
ca. 50 verschiedenen Files und den ganzen Member verarbeiten? wie gesagt der Satzaufbau ist bei allen gleich, der einzige Unterschied ist der Dateiname und der Satzformatname.

Habt Ihr noch eine Idee?

Beo