[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Nennewitz Besucher/Guest

    Teildateien per SQL auflisten

    Hallo Newsgroup.

    Gibt es eine Möglichkeit die Teildateien, die zu einer Tabelle gehören, per SQL aufzulisten?

    Viele Grüße,
    Christian Nennewitz

  2. #2
    Registriert seit
    Dec 2002
    Beiträge
    301
    Nein. Das klappt nur über den CL-Befehl DSPFD bzw. über das API QUSLMBR.
    Frank Hildebrandt

  3. #3
    Nennewitz Besucher/Guest
    Zitat Zitat von Frank Hildebrandt
    Nein. Das klappt nur über den CL-Befehl DSPFD bzw. über das API QUSLMBR.
    Schade. Aber es hätte ja sein können. :-)
    Trotzdem vielen Dank für Deine Antwort.

    Viele Grüße,
    Christian Nennewitz

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Per SQL gehts mit ein bisschen Aufwand:

    execute "call qcmdexc('dspfd myfile ... outfile(qtemp/mymbr)' 0000000nnn.00000)"

    nnn = Länge des Commands mit 10 Vorkomma und 5 Nachkomma

    Open "Select * from qtemp/mymbr"
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Nennewitz Besucher/Guest
    Zitat Zitat von Fuerchau
    Per SQL gehts mit ein bisschen Aufwand:

    execute "call qcmdexc('dspfd myfile ... outfile(qtemp/mymbr)' 0000000nnn.00000)"

    nnn = Länge des Commands mit 10 Vorkomma und 5 Nachkomma

    Open "Select * from qtemp/mymbr"
    Hallo.

    Ich kenne mich nur mit Access aus und nutze die AS/400 über Pass-Through Abfragen. Ich glaube ich kann das nicht so ganz nachvollziehen. Was muß man da hinschreiben wo die ... stehen? Und was meinst Du mit Länge des Commands?

    Ich habe z.B. die Bibliothek GES und eine Tabelle S8 mit Teildateien. Wie kann ich mit Deiner Methode die Teildateien von S8 anzeigen?

    Viele Grüße,
    Christian Nennewitz

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Mit Access ist es da etwas schwieriger.
    Du musst ein Modul in VBA schreiben und kannst dann mittels ADO den Execute auf der AS/400 ausführen.
    Wenn du allerdings die Kommandos der AS/400 nicht kennst, hast du hier Probleme, da ich nicht das ganze Programm hier reinschreiben kann (und schon gar nicht für umsonst ).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Nennewitz Besucher/Guest
    Zitat Zitat von Fuerchau
    Mit Access ist es da etwas schwieriger.
    Du musst ein Modul in VBA schreiben und kannst dann mittels ADO den Execute auf der AS/400 ausführen.
    Wie man SQL-Abfragen an die AS/400 sendet und die Ergebnisse auswertet weiß ich. Ist der Execute keine SQL-Anweisung?

    Zitat Zitat von Fuerchau
    Wenn du allerdings die Kommandos der AS/400 nicht kennst, hast du hier Probleme, da ich nicht das ganze Programm hier reinschreiben kann (und schon gar nicht für umsonst ).
    Ich dachte man könnte eine Liste der Teildateien mit einem SQL-Statement abrufen. Wenn dazu AS/400 Kommandos notwendig sind und wenn es so kompliziert ist, daß Du es nicht verraten kannst, dann macht es sowieso keinen Sinn.

    Trotzdem vielen Dank für die Antwort. Jetzt weiß ich zumindest mit Sicherheit das es mit SQL nicht geht.

    Grüße,
    Christian Nennewitz

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist soweit korrekt.

    Execute ist keine SQL-Anweisung sondern eine Methode im VBA zu einem Command-Objekt.
    Mittels Execute kann ich per VBA SQL-Befehle absetzen die nicht "select" heißen, also Call, Create, Delete, Update usw.
    Mittels OpenRecordset wird dann eine Abfrage per "Select" ausgeführt.

    Es geht hier nicht ums verraten, sondern einfach um den Aufwand, da ich hier nie Komplettlösungen einbringe sondern meist nur Wege aufzeige.
    Verraten habe ich den Weg ja bereits.

    Also nicht böse sein deswegen
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Nennewitz Besucher/Guest
    Zitat Zitat von Fuerchau
    Mittels Execute kann ich per VBA SQL-Befehle absetzen die nicht "select" heißen, also Call, Create, Delete, Update usw.
    Mittels OpenRecordset wird dann eine Abfrage per "Select" ausgeführt.
    Mir ist bekannt wie man mit Access SQL-Anweisungen auf der AS400 ausführt. Das es neben SELECT auch sowas wie UPDATE, INSERT INTO, CREATE usw. gibt ist mir auch bekannt. Ob man dazu ADO oder DAO benutzt und ob man das mit Execute oder sonst wie macht ist ja eigentlich egal.

    Zitat Zitat von Fuerchau
    Es geht hier nicht ums verraten, sondern einfach um den Aufwand, da ich hier nie Komplettlösungen einbringe sondern meist nur Wege aufzeige.
    Was ist denn jetzt eigentlich Deiner Meinung nach so aufwändig? Das Schreiben des VBA-Codes? Das SQL-Statement? Die mysteriösen Commands? Oder was?

    Das Du keine Komplettlösungen mit CD und Handbuch fertig zum Verkauf verpackt an mich lieferst ist mir klar. Das würde ich auch nicht verlangen.

    Ich möchte doch nur wissen, wie man mit dem DB/2 SQL Teildateien auflistet. Den nötigen VBA Code kann ich mir selbst basteln.

    Wenn in einer Access-Newsgroup jemand fragt, wie man die Felder einer Tabelle per VBA auflistet, dann bin ich gerne bereit das zu erklären. Auch wenn das ganze mal mehr als 3 Programmzeilen in Anspruch nimmt. Wenn hingegen einer fragt: "Wie lautet der Code um eine Finanzbuchhaltung zu entwickeln?" dann ist das was anderes.

    Selbstverständlich bin ich nicht böse. Mir ist ja klar das ein Forum oder eine Newsgroup etwas ist, an dem die Leute freiwillig und ohne Bezahlung teilnehmen. Also nix für ungut.

    Grüße,
    Christian Nennewitz

  10. #10
    Registriert seit
    Apr 2002
    Beiträge
    792
    Moin,

    ich denke das Fuerchau sagen wollte das, wenn du keinen Plan der Funktionsweise der AS/400 hast das ganze ein bissel schwieriger sein könnte. Falls du es über SQL versuchen willst, solltest du dir das hier mal angucken:
    http://www.rlpforen.de/showthread.ph...light=IBMDA400

    Alternativ schlage ich dir vor das du das ActiveX-Steuerelement von ClientAccess in einem Access-Forumalt verwendest. Das ist recht simpel zu handlen. Du kann damit einfach diesem Command absetzen.
    DSPFD FILE(QRPGLESRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) FILEATR(*PF) OUTFILE(MYLIB/MYOUTFILE)" aufrufen.
    Im Anschluss musst du dann entweder wieder über ADO die Daten lesen oder du arbeitest mit einer eingebundenen Tabelle (ob diese nach dem Überschreiben durch den vorherigen Command allerdings dann sofort richtig ist hängt manchmal so ein bissel von der Laune von Access ab).

    Gruß

    Sascha

  11. #11
    Nennewitz Besucher/Guest
    Zitat Zitat von Fuerchau
    execute "call qcmdexc('dspfd myfile ... outfile(qtemp/mymbr)' 0000000nnn.00000)"

    nnn = Länge des Commands mit 10 Vorkomma und 5 Nachkomma

    Open "Select * from qtemp/mymbr"
    Also ich habe jetzt mal versucht die Teildateien der Tabelle GES.S8 in die temporäre Datei GES.KANNWEG auszugeben.

    Ich nehme mal an das 'Länge des Commands' bedeutet, wieviel Zeichen zwischen den beiden Hochkomma vorkommen hier also 33. Das "..." habe ich ignoriert.

    Mein Versuch war folgender:

    CALL QCMDEXC('DSPFD GES.S8 OUTFILE(GES.KANNWEG)' 0000000033.00000)

    Alternative habe ich auch die Variante mit / statt . probiert also so:

    CALL QCMDEXC('DSPFD GES/S8 OUTFILE(GES/KANNWEG)' 0000000033.00000)

    Die AS/400 meint darauf:

    [IBM][Client Access Express ODBC-Treiber (32-Bit)][DB2/400 SQL]SQL0104 - Token 000000033.00000 ungültig. Gültige Token: ),.(#-104)

    Außerdem habe ich noch statt "000000033.00000" "000000033,00000" probiert. Geht aber auch nicht.

    Was mache ich falsch?

    Grüße,
    Christian Nennewitz

  12. #12
    Registriert seit
    Apr 2002
    Beiträge
    792
    Moin,

    falsch machst du das du bevor du den eigentlichen Befehl ausführst nicht die Stored Procedure erstellst wie Baldur es beschrieben hat. Du musst dir die SP erstellen
    PHP-Code:
    CREATE PROCEDURE QTEMP.QCMDEXC
    (IN PARM1 CHAR (512), IN PARM2 DEC(155))
    LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL
    NAME QSYS
    .QCMDEXC PARAMETER STYLE GENERAL 
    und im Anschluss kannst du die SP per Call aufrufen. Du übergibst im Parameter 1 deinen richtigen Befehl und dann im Parameter 2 die Länge. Wichtig "/" statt "." im Befehl!

    Gruß

    Sascha

Similar Threads

  1. per SQL Feld ändern...
    By svente in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-01-07, 09:49
  2. Teildateien mit sql auslesen
    By chrisssiie in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 09-01-07, 10:53
  3. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  4. Kopieren per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 18-07-06, 09:36
  5. Sortierung per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-05-06, 12:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •