[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    133

    Variable Feldnamen

    Kann man in RPG eigentlich mittlerweile mit variablen Feldnamen arbeiten ? Bislang baut mein Program SQL Statements zusammen und führt diese aus. Das funktioniert zwar, ist aber sicher nicht so performant wie das native Schreiben und Lesen auf die Datenbank. Wäre schön wenn es das mal geben würde.

    Thomas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Was willst du mit variablen Feldnamen ?
    Zur Laufzeit benötigst du nur Adressen.

    Du kannst mittels Pointer und %alloc(size) beliebige Strukturen verwalten.

    Um diese mit SQL zu verarbeiten musst du eine SQLDA-Struktur aufbauen, in der du dann pro Feld den SQL-Datentyp sowie die Speicheradresse angibst.

    Beim Select/Insert/Update/Fetch gibts dann "using SQLDA : MySQLDA".

    Aber du solltest deine Anforderung noch mal genauer beschreiben.
    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
    Jan 2001
    Beiträge
    133
    Die Aufgabe die ich lösen will, ich will Daten aus einem Flat File (jeder Satz bis zu 1024 Zeichen als 1 String) in Datenbanken einsortieren. Die Struktur der Daten habe ich in einer Tabelle. Dort stehen neben den Formaten der einzelnen Felder die Angaben wie der String aufgebaut ist. Mit diesen Infos will ich dann die Daten auslesen und in einem Programm möglichst ohne SQL verarbeiten. Im Prinzip wie früher intern beschriebene Dateien, aber ich habe jedes mal eine andere Struktur. Im Moment mache ich folgendes:

    Struktur lesen > Create Table > In DO Schleife die Sätze lesen > für jeden Satz ein Insert Befehl zusammenbauen > Satz einfügen.

    Das funktioniert, nur habe ich mir gedacht es muss auch einfacher gehen, weil meine SQL Anweisungen sind doch recht langsam, finde ich.

    Wenn ich einen Satz mit Feldern wie aus einer extern beschriebenen Datei hätte, könnte ich einfach die Werte auf die Felder zuweisen und einen Write absetzen, das sollte schneller gehen. Oder irre ich hier ?

    Thomas

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da würde ich dir einfach CPYTOIMPF bzw. CPYFRMIMPF empfehlen.
    Die Struktur der Daten definierst du in einer eigenen SRCPF.
    Der anschließende CPY... ist im übrigen sehr schnell.

    Warum das Rad immer neu erfinden.
    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
    Jan 2001
    Beiträge
    133
    Das ginge natürlich und daran habe ich auch gedacht. Dabei habe ich aber leider keine Möglichkeit, die eingelesenen Daten noch aufzubereiten. So soll z.B. ein Datum das als NUM(6) definiert ist (080121) gleich als "richtiges" Datumsfeld (*ISO) abgelegt werden. Diese Konvertierung bekomme ich so nicht hin, in RPG schon. Ein weiteres Beispiel wäre die Aufbereitung von Character Feldern. TRIM, Austausch von unerwünschten Inhalten, Korrektur Groß/Kleinschreibung e.t.c. Da brauche ich ein Programm mit Intelligenz. Für Daten die nicht aufbereitet werden müssen, werde ich aber Deine Überlegung sicher noch in Betracht ziehen.

    Thomas

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da hilft dir dann tatsächlich nur das Arbeiten mit einer SQLDA, die du dynamisch mit %ALLOC anlegen und verwalten kannst.

    Deinen Insert kannst du dann so codieren:

    Insert into MyFile (F1, F2, ...) values(?, ?, ...)

    den du mit Prepare vorbereitest.

    Je "?" benötigst du einen SQLVAR-Eintrag innerhalb der SQLDA mit Feldtyp und Speicheradresse (Pointer).

    Per "Execute MyStmt using : MySQLDA" kannst du dann den Insert sehr schnell durchführen.

    Die Details zur SQLDA kannst du dem SQL-Programmierhandbuch entnehmen, ein Beispiel der Definition findest du in der Lib QSYSINC (falls installiert).
    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
    Jan 2006
    Beiträge
    82
    Hallo zusammen,

    ich hab gehört, dass es ab V5R4 möglich sein soll, Variable Feldnamen zu benutzen.
    Gefunden habe ich bisher leider nichts.
    Weiß jmd. von euch etwas darüber?

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich kann mir nicht im entferntesten vorstellen, wie man mit variablen Feldnamen in ILERPG umgehen soll.

    Das kann allenfalls Java und vielleicht noch VisualBasic.
    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
    Jan 2006
    Beiträge
    82
    und PHP, C++, C#, Delphi, ML, ...
    Also warum nicht auch RPG???

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hierzu müsste man klären, was du mit "variablen Feldnamen" überhaupt meinst.

    Nicht alle Variablen, die sich so nennen, sind tatsächlich Variablen.

    Meistens wird dies mit Auflistungen (Collections, Maps) gelöst, die halt mit einem Key und einer Klasse (eben der Variablen) gefüllt werden.

    Echte variable Feldnamen gibt es da tatsächlich doch nicht, dazu müsste es eine DIM-Anweisung geben, die dieses unterstützt.
    Eine solche kenne ich allerdings nicht.

    Wenn ausserdem eine Sprache objektorientiert ist (und ILERPG ist es nicht) wird häufig über Klassen der Datenaustausch zwischen Funktionen realisiert, die Namen spielen dann tatsächlich keine Rolle mehr.

    Was hindert dich daran, eine Array zu erstellen, die aus 2 Elementen (Name und Adresse) besteht ?
    Du kannst dann per Lookup nach dem Namen suchen und hast dann die Adresse dazu.

    Per %alloc kannst du Speicher anlegen (entspricht weitestgehende dem NEW-Operator, allerdings ohne Konstruktoren), und die Adresse mit einem Namen in der Tabelle speichern.

    Ich denke nicht, dass RPG diese Vorgänge irgendwann automatisieren wird.
    Dann sollte man wirklich lieber zu C++ wechseln (mit den Nachteilen der nun fehlenden RPG-Funktionalität).
    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
    Mar 2002
    Beiträge
    5.365
    Hallo,

    das ist kein Fall für variable Feldnamen, sondern hier geht es um ein flexibles mapping, welches in RPG kein Problem darstellt. Das geht selbst in RPGII völlig ohne Probleme. Man braucht lediglich einen Satz an Variablen, der alle benötigten Datentypen abdeckt und eine Überlagerungsdatenstruktur, in der man dann Substrings (in RPGII ist das dann eine Character Array von bis) passend zuweist (plus ein paar Standard cast procedures für DATE und Co.).
    Soweit es sich hier um festgelegte mappings handelt, die ab und an erweitert werden, ist das ein Fall, wo man generierte Programme für eine elgante Lösung einsetzen kann. Werden diese abgespeichert, fällt der Overhead der Generierung lediglich beim ersten auftreten einer neuen Struktur an.

    D*B
    Zitat Zitat von Liebhoff Beitrag anzeigen
    Die Aufgabe die ich lösen will, ich will Daten aus einem Flat File (jeder Satz bis zu 1024 Zeichen als 1 String) in Datenbanken einsortieren. Die Struktur der Daten habe ich in einer Tabelle. Dort stehen neben den Formaten der einzelnen Felder die Angaben wie der String aufgebaut ist. Mit diesen Infos will ich dann die Daten auslesen und in einem Programm möglichst ohne SQL verarbeiten. Im Prinzip wie früher intern beschriebene Dateien, aber ich habe jedes mal eine andere Struktur. Im Moment mache ich folgendes:

    Struktur lesen > Create Table > In DO Schleife die Sätze lesen > für jeden Satz ein Insert Befehl zusammenbauen > Satz einfügen.

    Das funktioniert, nur habe ich mir gedacht es muss auch einfacher gehen, weil meine SQL Anweisungen sind doch recht langsam, finde ich.

    Wenn ich einen Satz mit Feldern wie aus einer extern beschriebenen Datei hätte, könnte ich einfach die Werte auf die Felder zuweisen und einen Write absetzen, das sollte schneller gehen. Oder irre ich hier ?

    Thomas
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Jan 2001
    Beiträge
    133
    Ich glaube das Thema ist noch nicht richtig verstanden worden. Klar kann ich mit Datenstrukturen einen String aufbereiten und die Inhalte dann Variablen zuweisen. Was aber wenn nicht nur die Struktur der Quelle jedes mal anders ist sondern auch die des Ziels ? Da müsste ich dann ja einen Generator basteln, der mir die entsprechenden D und dann die C Bestimmungen verfaßt und dann das Programm neu erstellt und anschließend ausführt. Das kann es nicht sein.

    Thomas

Similar Threads

  1. Variable Ettiketenlänge
    By rguenzel in forum NEWSboard Drucker
    Antworten: 5
    Letzter Beitrag: 18-01-07, 13:38
  2. STRPCCMD mit einer Variable steuern
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-11-06, 14:32
  3. "Environment variable not found"
    By Kampi4 in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 09-10-06, 10:19
  4. Variable Zahlenkonvertieren
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 28-08-06, 12:21
  5. String mit HexInhalt muss als Hex-Wert in Variable
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-05-06, 07:45

Berechtigungen

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