-
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
-
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.
-
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
-
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.
-
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
-
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.
-
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
-
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
-
*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
-
Sind ja doch ganz schöne Einschränkungen.
Warum nur max. 9000 Sätze ?
-
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
-
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
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By GraueEminenz in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 10-07-06, 11:58
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks