[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Oct 2003
    Beiträge
    192

    Generische Felddefinition bzw Generische SQL Ausgabe

    Moin,

    Habe folgendes Problem:
    Ich will ein Programm erschaffen welches mir für egal welche Datei (per Parameter übergeben) die Daten ausliest und nach Excel schreibt.

    Das schreiben in Excel ist kein Problem, wohl aber das auslesen der Dateien per SQL.

    Gibt es eine Möglichkeit die Anzahl & Art der Ausgabefelder für einen Cursor zu verändern, bzw wie würdet ihr dieses Problem angehen ?

    Mein derzeitiger Lösungsansatz ist, das dynamische SQL so zu programmieren dass die Ausgabefelder alle 256 Zeichen (Alpha) lang sind (also alle Felder im SQL dahingehend aufbereiten) und anschliessend mit %TRIM wieder zu kürzen und die numerischen (wegen der Kommas) dann nochmal aufzubereiten.

    Ich hoffe aber dass es etwas leichteres und einfacheres (dunkler, verführerischer?) gibt.

    Vielen Dank schonmal

    Gruss
    Rince

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Bei dynamischem SQL kannst du auch mit variabler SQLDA arbeiten. In den SQLDA-Definitionen bestimmst du Ausgabe-Typ, Adresse und Länge der Felder.
    Beim FETCH codierst du dann USING :MYSQLDA.

    Was leichteres gibt es leider nicht.
    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

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    192
    Hi,

    danke für die superschnelle Antwort...

    habe nun schonmal alles soweit deklariert und gewandelt, scheitere aber daran dass ich nicht weiss wie ich die SQLVAR Korrekt füllen soll (SQLTYPE, SQLLEN, etc.)

    Hast du eventuell ein kleines Beispiel für mich ? (Brauche wirklich nur einfache Alpha & Numerische (gepackt, ungepackt) Variablen.

    Herzlichen Dank

    Rince

    P.s. benutze für Alphawerte SQLTYPE 452, für die gepackten Dezimalen 484

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    SQL schafft die automatische Übersetzung nach Alpha. Wenn du also als Zielfeld immer Alpha verwendest müsste es klappen.
    Ansonsten caste doch die numerischen Felder nach Alpha.
    Mittels DESCRIBE eines vorbereiteten Selects bzw. DESCRIBE TABLE kannst du die Felder und Typen in einer SQLDA ausgeben lassen, so dass du den dynamischen "char(numfield)" erstellen kannst.
    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
    Registriert seit
    Oct 2003
    Beiträge
    192
    Hi,

    Entschuldige wenn ich mich vielleicht etwas dumm anstelle, aber ich habe bisher so gar keine Erfahrung mit der SQLDA gehabt.

    Ich habe nun folgende Sachen gemacht:
    D MYSQLDA S LIKE(SQLDA)
    D SQL_NUM C CONST(4)

    SQLN = 4 (4 Spalten hat die Testtabelle)
    FILE = 'TBLDST' (so heisst die Tabelle)

    C/EXEC SQL
    C+ INCLUDE SQLDA
    C/END-EXEC

    C/EXEC SQL
    C+ DESCRIBE TABLE :FILE INTO :MYSQLDA USING NAMES
    C/END-EXEC

    Bereits an dieser Stelle ist der SQLCOD = -804 -> SQLDA ist ungültig.

    Was mach ich falsch ?
    Wenn ich den INCLUDE Verschiebe habe ich ebenfalls kein besseres Ergebnis.


    1000 Dank für die Mühe

    Rince

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Tja, die SQLDA kann man zwar mit INCLUDE einbinden, sie enthält dann allerdings nur 1 Element.
    Wenn man mehr Elemente benötigt, muss man diese selber definieren !

    D MYSQLDA DS
    D MYSQLDAID 8
    D MYSQLDABC 10I 0
    D MYSQLN 5I 0
    D MYSQLD 5I 0
    D MYSQLVAR 80 DIM(xx) <== XX = potentielle Anzahl Felder
    D MYSQLTYPE 5I 0 OVERLAY(MYSQLVAR:1)
    D MYSQLLEN 5I 0 OVERLAY(MYSQLVAR:3)
    D MYSQLRES 12 OVERLAY(MYSQLVAR:5)
    D MYSQLDATA * OVERLAY(MYSQLVAR:17)
    D MYSQLIND * OVERLAY(MYSQLVAR:33)
    D MYSQLNAME 30 VARLEN OVERLAY(MYSQLVAR:49)

    MYSQLN muss mit der Anzahl der verfügbaren SQLVAR's gefüllt werden.
    MYSQLD liefert dann die Anzahl gefüllter Elemente.
    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
    Registriert seit
    Oct 2003
    Beiträge
    192
    HI,

    jetzt bin ich so circa da wo wir hier im
    Forumspost auch schon waren.

    SQLCOD -822, Die SQLDATA und SQLIND sind allerdings *NULL bei mir (Liegt wohl an den 4 Feldern ? (Numerisch, Alpha, Alpha, Numerisch)

    Soll ich die SQLDATA und SQLIND vorher auf Werte setzen ? Feldgrössen sind ja bekannt, also auch die Menge an Speicher die ich brauche (oder habe ich die Bedeutung der Felder missgeduetet?)

    Eins ist auf jeden fall klar, soviel gegoogelt wie heute hab ich lange nicht mehr.

    Gruss
    Rince

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Genauso !
    Bei USING SQLDA muss beim FETCH natürlich MYSQLDATA auf das Zielfeld verweisen, wo SQL den Inhalt ablegen soll: MYSQLDATA(Index) = %ADDR(ZFeld)
    MYSQLIND muss keinen Inhalt haben, aber wenn die Quelle NULL-Inhalt haben kann oder der Cast einen Fehler ausweist (z.B. Zielfeld zu klein), muss MYSQLIND(Index) auf eine "5I 0"-Variable verweisen. Diese enthält:
    0 = Alles OK
    -1 = NULL-Inhalt
    -2 = Fehler bei der Übergabe
    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
    Registriert seit
    Oct 2003
    Beiträge
    192
    *jubel* *tanz*

    DANKE !!!!!!!!!!!

    Habe mir eine Ergebnistabelle gemacht auf deren einzelne Positionen ich verweise als Addresse.

    Damit kann ich also jedwede Datei verarbeiten (deren einzelne Felder nicht über 256 Zeichen gehen dürfen (Ergebnis ist 256 A) ) die nicht mehr als 9000 Sätze hat. (DIM 9000)


    Das hat mich schonmal entscheidend weitergebracht.

    Angenehmen Tag noch, deine gute Tat des Tages ist erledigt

    Gruss
    Rince

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Sind ja doch ganz schöne Einschränkungen.
    Warum nur max. 9000 Sätze ?
    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

  11. #11
    Registriert seit
    Oct 2003
    Beiträge
    192
    Habe ich jetzt mal einfach so gewählt.

    Ginge natürlich auch die DIM(Satzanzahl_der_datei)
    Variante.

    Schaun mer mal was die Endversion so bekommt... richtig überschaubar sind ja so ewig lange Excel Tabellen nicht, aber wer weiss was wir da so bereitstellen werden.

    Gruss

    Rince

  12. #12
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Rince,

    warum denn das Rad neu erfinden ? Es gibt doch schon genug Freeware für Deine Anforderung (z.B. SQL2XLS).

    Gruß,
    KM

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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