View Full Version : Teildateien mit sql auslesen
Jetzt kann die Javafraktion loslegen.
Deine Vermutung ist richtig. Sobald die Sitzung weg ist, ist der OVRDBF ebenfalls weg.
Du könntest z.B. in SQL eine Stored Procedure definieren die den OVRDBF ausführt und dann dein SQL.
Allerdings bin ich in diesen Dingen nicht gut genug.
Gruß
DVE
Mittels CREATE ALIAS kannst du eine LF für SQL erstellen, die genau auf 1 Teildatei geht.
OVRDBF aus Java geht nur, wenn du dies aus der SQL-Verbindung z.B. mit CALL QCMDEXC machst.
Prozedur/Programmaufrufe aus SQL sind hier schon mehrfach beschrieben.
Um alle Teildateien per SQL als 1 Tabelle zu bearbeiten kannst du einen CRTLF machen, der alle Teildateien beinhaltet. Allerdings darfst du dann keinen UNIQUE-Key haben, da dieser Teildateiübergreifend ist.
Wenn eine Teildatei hinzukommt ist der CRTLF zu wiederholen, automatisch passiert da nichts.
Um die Teildateien aus Java festzustellen kannst du per DSPFD ... OUTFILE über QDCMDEXC eine Liste erstellen um anschließend den OVRDBF je Teildatei (vor dem Select) durchzuführen.
chrisssiie
09-01-07, 08:59
hmmm....
also irgendwie funtkioniert des mit dem OVRDBF nicht so ganz...
StringBuffer sql2 = new StringBuffer("CALL QTEMP.QCMDEXC('OVRDBF FILE(Datei) MBR(name der Teildatei)', Länge)");
try {
stm.execute(sql2.toString());
} catch (Exception e) {
e.printStackTrace();
}
StringBuffer sql3 = new StringBuffer("SELECT * FROM Datei");
ResultSet rs1 = stm.executeQuery(sql3.toString());
while(rs1.next())
{
System.out.println(rs1.getString(3));
}
Er schreibt mir aber immer noch in den Inhalt von der *FIRST Teildatei hin....
Kann es sein das das OVRDBF mit java nicht funktioniert?
mfg
chrisssiie
Hallo Chrissie
Schreib als Name der Teildatei *ALL.
Laut Beschreibung des OVRDBF Befehl sollte es funktionieren.
*ALL
Alle Teildateien der aktuellen Datei werden sequentiell
verarbeitet. Die Überschreibungsparameter für die erste
Teildatei gelten auch bei der Eröffnung aller folgenden
Teildateien. Während Überschreibungen, die vor Eröffnung der
ersten Teildatei ausgegeben wurden, verarbeitet werden, werden
nach Eröffnung der ersten Teildatei ausgegebene Befehle zum
Überschreiben oder Löschen von Überschreibungen nicht
berücksichtigt. Die Parameter EOFDLY, FMTSLR, INHWRT und
POSITION können nicht angegeben werden, wenn MBR(*ALL) in einem
zuvor abgesetzten Befehl OVRDBF angegeben wurde und der Befehl
für diese Datei noch wirksam ist. Falls Parameter angegeben
werden, die sich gegenseitig ausschließen, wird eine
Abbruchnachricht gesendet.
Gruß
DVE
Frank Hildebrandt
09-01-07, 09:13
@DVE
Wenn man mit OVRDBF den Parameter MBR auf *ALL setzt, dann kann man über SQL nicht auf die Datei zugreifen. Das klappt dann nur über Record Level Access.
@chrisssiie
Du könntest testweise noch einmal versuchen beim OVRDBF den Parameter OVRSCOPE auf *JOB zu setzen. Eventuell gibt es Probleme mit der Aufrufebene.
chrisssiie
09-01-07, 09:20
@Frank Hildebrandt
danke, das mit OVRSCOPE(*JOB) hat funktioniert ;)
Jetzt hab ich nur noch ein problem *grins*
wie krieg ich alle DSPF(Displayfiles), die Teildateien sind raus?
Gibt es da irgendwas wie ich die Art der Teildatei Abfragen kann?
Frank Hildebrandt
09-01-07, 09:31
Hiermit kannst Du Dir eine Datei erzeugen, die die gewünschten Informationen enthält. Im Feld MLSEU2 befindet sich z.B. die Teildateiart, also z.B. DSPF.
DSPFD FILE(QGPL/QDDSSRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(QTEMP/MYMBR)
chrisssiie
09-01-07, 09:46
ok, danke ;)
aber woher weis man sowas?
bin noch anfänger in as400 bereich, wie man wohl merkt ;)
Gibts da irgendwelche gute seiten im www womer nach sowas suchen kann?
Gibts bei der *MBRLIST auch ein Feld für den Namen der Teildatei?
Oder muss man da noch ein DSPFD mit TYPE *MBR machen und dann MBNAME?
Frank Hildebrandt
09-01-07, 09:58
Folgende Feldnamen in der erzeugten Datei sind für Dich wahrscheinlich wichtig.
MLFILE - Datei z.B. QDDSSRC
MLLIB - Bibliothek z.B. QTEMP
MLNAME - Teildatei
MLSEU2 - Teildateiart
Die Feldinformationen zur Datei kannst Du Dir mit DSPFFD anzeigen lassen. Den Dateiinhalt kannst Du Dir z.B. über RUNQRY *N Dateiname anzeigen lassen oder über SQL.
Woher die Leute über Dinge zur AS/400 Bescheid wissen? Sie ignorieren einfach die gesamte restliche Welt. Scherz beiseite. Das sind einfach Erfahrungswerte und wenn Du fleissig Beiträge postest, dann bist Du ganz schnell fitt.
Woher die Leute über Dinge zur AS/400 Bescheid wissen? Sie ignorieren einfach die gesamte restliche Welt. Scherz beiseite. Das sind einfach Erfahrungswerte und wenn Du fleissig Beiträge postest, dann bist Du ganz schnell fitt.
Genau so ist es. Vor allem lernt man aus solche Fragen und den dazugehörigen Antworten hinzu.
Wie sagte mal ein italienischer Staatspräsident: Es gibt keine dumme Fragen.
Gruß
DVE