PDA

View Full Version : Query und CPYTOSTMF



KingofKning
06-09-13, 08:28
Hallo *all,
ich habe hier mit Query eine Datenbankdatei erstellt die ich gerne in ein Streamfile kopieren möchte.

Wenn ich den Befehl absetze

In Datenstromdatei kopieren (CPYTOSTMF)

uswahl eingeben und Eingabetaste drücken.

usgangsteild. o. Sicherungsd. > '/qsys.lib/xxx.lib/kndrptdat.file/kndrptd
.mbr'
ieldatenstromdatei . . . . . . > '/home/xxx/kndrptdat.txt'

atenstromdateiauswahl . . . . . *NONE *NONE, *ADD, *REPLACE
atenumsetzungsangaben . . . . . *AUTO *AUTO, *TBL, *NONE
atenbankdatei-CCSID . . . . . . > *FILE 1-65533, *FILE
odepage der Datenstromdatei . . > *PCASCII 1-32767, *STMF, *PCASCII... Kommt er mir mit der Fehlermeldung


Nachricht . . . : Objekt ist entweder keine Datei oder eine Datei mit
Attributen, die von diesem Befehl nicht unterstützt werden.
Ursache . . . . : Das Objekt
/qsys.lib/xxx.lib/kndrptdat.file/kndrptdat.mbr muss entweder eine
physische Quellendatei mit drei Feldern oder eine programmbeschriebene Datei
sein. Extern beschriebene Dateien und physische Quellendateien, die weniger
oder mehr als drei Felder enthalten, werden von diesem Befehl nicht
unterstützt.
Fehlerbeseitigung: Entweder den Namen einer vorhandenen physischen
Quellendatei mit den richtigen Attributen oder eine programmbeschriebene
Datei angeben und den Befehl wiederholen.
Muß ich wirklich dann immer noch die Daten in eine neu zu erstellende phy-datei kopieren oder gibt es da einen anderen Weg?

GG

Fuerchau
06-09-13, 08:32
CPYxxSTMF unterstützt leider keine PF's mit einer CCSID ungleich *HEX (65535).
Query erstellt neue Dateien immer mit einer CCSID aus der Quelle, und SQL-Tables haben sowieso immer eine CCSID.

Dafür gibts dann die CPYxxxIMPF!

KingofKning
06-09-13, 12:15
Hallo *all

Ich habe die Daten ja mit Query erstellt (auch spaßeshalber mal mit qmqry) ich habe aber immer das Problem das ich Müll bekomme.

Im Query sieht es so aus


KTO KNDTYP KNDGRP T1 KNAM T2 NAM1 T3 NAM2
Ident Kurzbezeichnung Nam 1/ Nam 2/
nummer P-Ans. P-Ans.
1.011 ;X; 1 ; Karl Abt ; Carl Abt KG ; Eisenwaren Großhandel Nach dem copy

===> CPYTOIMPF FROMFILE(xxx/KNDRPT) TOSTMF('/home/xxx/kndrpt2') STMFC
ODPAG(*PCASCII) RCDDLM(*CRLF) so


1011 ,"^ç^","ñ","^","Karl Abt ","^","Carl Abt KG Wo liegt da mein Fehler?

Pikachu
06-09-13, 12:32
Der CPYTOIMPF nimmt dir das mit den Trennzeichen (im Unterschied zum CPYTOSTMF) ab.
Somit mußt du die nicht mühsam in die Query einbauen.
Gib auch mal den Parameter MBROPT(*REPLACE) mit an.
Lösche mal die erstellte Datenstromdatei und probiers nochmal.

Ein Problem sind auch selbstdefinierte Textfelder in der Query. Diese werden meistens als Felder mit CCSID 65535 in der Ausgabedatei erstellt und vom CPYTOIMPF dann nicht von EBCDIC in ASCII umgesetzt.

Fuerchau
06-09-13, 15:42
Als Zielccsid solltest du die 1252 wählen, PCASCII entspricht Codepage 850.
Was steht denn tatsächlich in der PF?
Du scheinst da doch mehrere Felder zu haben.

Aber wie mein Vorredner schon sagt, gib per Query Einzelfelder aus, der CPYFRMIMPF übergibt dann das CSV-Format.

Solltest du HEX-Felder haben, kannst du auch z.B. FROMCCSID(273) angeben.

KingofKning
10-09-13, 10:09
Ich bin ja immer noch beim Thema des Kopierens.
Warum das in Excel problemfrei funktioniert und mit AS/400 Bordmittel nicht bleibt mir ein Rätsel.

Ich erstelle ja ein View

> CREATE VIEW KNDRPT AS SELECT DISTINCT T01.ADKTO, 'X' AS KNDTYP,
'1' AS KNDGRP, T01.ADKNAM, T01.ADNAM1,
T01.ADNAM2, T01.ADSTR, T01.ADPLZ,
T01.ADORT, T01.ADKOPE, T01.ADSA04 , Sprich ich habe Datenbankfelder und fixe Texte die ich in der View hinzufüge.

die am Bildschirm dann ja so aussieht.


KTO KNDTYP KNDGRP KNAM NAM1 NAM2 STR
Ident Kurzbezeichnung Nam 1/ Nam 2/ Strasse/P-Ans.
nummer P-Ans. P-Ans.
1011 X 1 Karl Abt Carl Abt KG Eisenwaren Großhandel Postfach 11 30
1017 X 1 Attinger's Joh.Gg.Attinger's Nachfolger GmbH Piechlerstr. 18
und mache dann ein

In Importdatei kopieren (CPYTOIMPF)

Auswahl eingeben und Eingabetaste drücken.

Ausgangsdatei:
Datei . . . . . . . . . . . . > KNDRPT Name
Bibliothek . . . . . . . . . > yyy Name, *LIBL, *CURLIB
Teildatei . . . . . . . . . . *FIRST Name, *FIRST, *ALL
Nach Datenbankdatei:
Datei . . . . . . . . . . . . Name
Bibliothek . . . . . . . . . *LIBL Name, *LIBL, *CURLIB
Teildatei . . . . . . . . . . *FIRST Name, *FIRST, *FROMMBR, *ALL
Zieldatenstromdatei . . . . . . > '/home/xxx/knd2.txt'

Sätze ersetzen od. hinzufügen . *ADD *ADD, *REPLACE
Ausgangs-CCSID . . . . . . . . . *FILE 1-65533, *FILE
Codepage der Datenstromdatei . . > 1252 1-32767, *STMF, *PCASCII...
Satzbegrenzer . . . . . . . . . > *CRLF Zeichenwert, *EOR, *CRLF...
Satzformat der Importdatei . . . *DLM *DLM, *FIXED Das Ergebnis ist dann auf dem PC


1011 ,"ç","ñ","Karl Abt ","Carl Abt KG ","Eisenwaren Großhandel Sprich die fixen Felder sind schon mal kaputt.

Wie müßte ich die dann anlegen um das X und die 1 sauber zubekommen?

Für Hinweise dankbar
GG

Fuerchau
10-09-13, 11:19
Dies liegt in deiner Arbeitsumgebung begründet.
Hat dein Job CCSID 65535 (*HEX) werden die Konstanten wohl auch als HEX definiert.
Der CPYxxxIMPF macht dann keine Codewandlung, die Felder sind ja binär.

Du musst den Konstanten eine CCSID verpassen:
cast('X' as char(1) ccsid 273) as Name