-
 Zitat von woki
Das bekommst du mit execute immediate hin:
Code:
/free
varFeldName = 'SaNr';
varFeldWert = SaNr;
varSQLStatement = 'SELECT SaName From SATEP01 Where ' + varFeldName + ' = ' + varFeldWert;
/end-free
c/exec sql
c+ Execute immediate :varSQLStatement
C/end-exec
so weit war ich am Anfang auch
Aber bei genauem Betrachten bringt mich das nicht weiter, denn ich weiss ja nicht, welches Feld ich benötige... das ganze ist ja variabel...
In meinem Beispiel ist die Hostvariable jetzt SaNr... kann aber auch ein ganz anderes Feld sein, was abgefragt werden soll...
Ich formuliere meine Frage mal ganz konkret:
Wie komme ich an den Inhalt eines Feldes, dessen Name in einer Programmvariable steht ???
-
 Zitat von VAHLE
Ich formuliere meine Frage mal ganz konkret:
Wie komme ich an den Inhalt eines Feldes, dessen Name in einer Programmvariable steht ???
damit :
Code:
d sqlStatement s 1024 inz('')
d myPgmVar s 128
/free
myPgmVar = 'MyFeld1';
sqlStatement = 'select ' + %trim(myPgmVar) + ' ' +
'from myLib/MyFile ';
/end-free
C/exec sql
C+ prepare s1 FROM :sqlStatement
c/end-exec
C/exec sql
C+ declare c01 cursor for s1
c/end-exec
etc...
oder verstehe ich deine Frage immer noch nicht? Hast du ein konkretes Bespiel?
-
 Zitat von woki
damit  :
Code:
d sqlStatement s 1024 inz('')
d myPgmVar s 128
/free
myPgmVar = 'MyFeld1';
sqlStatement = 'select ' + %trim(myPgmVar) + ' ' +
'from myLib/MyFile ';
/end-free
C/exec sql
C+ prepare s1 FROM :sqlStatement
c/end-exec
C/exec sql
C+ declare c01 cursor for s1
c/end-exec
c/exec sql
c+ open c01
c/end-exec
etc...
Danke. Bringt mich aber auch nicht weiter...
Denn ich möchte in der Where-Bedingung den Vergleichswert variabel haben...
Wenn ich das im RPG "hart" codieren würde, dann mache ich das ja über den Vergleich mit einer Hostvariablen.
Bsp.: "... Where Feld1 = :PgmFeld"
Aber eben diese Hostvariablen kann man im dynamischen SQL ja nicht verwenden...
Ich kenne also in dem Fall nur den Feldnamen. In meinem Beispiel "PgmFeld"... Und da hapert es momentan bei mir, wie ich an den Inhalt eines Feldes komme, dessen Name in einem Programmfeld steht...
-
SO dynmaisch geht das ja nun auch wieder nicht.
Du musst dir da schon mal was einfallen lassen.
Z.B.:
VarPos = %scan(':':MySql);
if VarPos > *zero;
select;
when %subst(MySQL:VarPos:6) = 'MyVar1';
MySQL = %replace(MySQL:':MyVar1':'''' + MyVar1 + '''');
when %subst(MySQL:VarPos:6) = 'MyVar2';
MySQL = %replace(MySQL:':MyVar2':%char(MyVar2));
endsl;
endif;
-
 Zitat von Fuerchau
SO dynmaisch geht das ja nun auch wieder nicht.
Du musst dir da schon mal was einfallen lassen.
Z.B.:
VarPos = %scan(':':MySql);
if VarPos > *zero;
select;
when %subst(MySQL:VarPos:6) = 'MyVar1';
MySQL = %replace(MySQL:':MyVar1':'''' + MyVar1 + '''');
when %subst(MySQL:VarPos:6) = 'MyVar2';
MySQL = %replace(MySQL:':MyVar2':%char(MyVar2));
endsl;
endif;
Dann müsste ich im RPG aber auch alle möglichen Feldnamen abfangen...
Genau das möchte ich ja nicht. Ich möchte das so dynamisch, wie möglich gestalten.
Gibt es keine Möglichkeit, im RPG mit variablen Feldnamen zu arbeiten ?
-
nur ein paar Anmerkungen:
- dynamic SQL kann sehr wohl mit Hostvariablen, der prepareString enthält dann ? als Platzhalter, dei beim execute übergeben werden
- diese Variablen müssen, wie alle Namen zur Compiletime bekannt sein (wo sollen sie auch zur Laufzeit herkommen)
- gehen tut letztlich sogut wie alles, aber ob das Design was taugt, das ist in diesem Fall für mich noch eine nicht beantwortete Frage.
D*B
-
Die Platzhalter (?) waren mir auch bekannt, aber das löst mein Problem leider auch nicht.
Vergesst bitte einmal diese spezielle Aufgabenstellung hier.
Ist es überhaupt irgendwie möglich, an den Inhalt eines Feldes zu kommen, dessen Name selbst Inhalt eines Programmfeldes ist ?
(php kann ja z.B. auch mit variablen Feldnamen umgehen (z.B. var1=@FeldName - glaube ich)
-
wie ich bereits sagte, geht viel und auch dieses, ich habe allerdings keinen Bock mich auf Diskussionen einzulassen, nach dem Muster: das war mir bekannt, hilft mir aber auch nicht weiter...
 Zitat von VAHLE
Die Platzhalter (?) waren mir auch bekannt, aber das löst mein Problem leider auch nicht.
Vergesst bitte einmal diese spezielle Aufgabenstellung hier.
Ist es überhaupt irgendwie möglich, an den Inhalt eines Feldes zu kommen, dessen Name selbst Inhalt eines Programmfeldes ist ?
(php kann ja z.B. auch mit variablen Feldnamen umgehen (z.B. var1=@FeldName - glaube ich)
-
@Bender:
Entschuldigung, aber ich bin mir keiner Schuld bewusst, dass ich mich hier irgendwie im Ton vergriffen haben könnte...
Ich hab mir heute den ganzen Morgen lang den Kopf über dieses Problem zerbrochen und bin bereits an allen hier genannten Lösungsansätzen gescheitert.
Warum Du Dich jetzt persönlich angegriffen fühlst, kann ich irgendwie nicht ganz nachvollziehen.
-
Also ich habe das Thema auch schon mal diskutiert. siehe http://www.newsolutions.de/forum-sys...feldnamen.html
Jedoch führte auch das damals zu keinem Ergebnis. Ich finde es auch immer recht schade, wenn man am Ende der Diskussion dann nur den Tip bekommt, mal über sein "Konzept dahinter nachzudenken" Wer so ein Problem hat, hat meistens auch eine anspruchsvolle Aufgabe dahinter, da kann sich der geneigte Schreiber sicher sein. Und das Argument mit den anderen Programmiersprachen die das auch nicht oder eben doch können, weil es nur Interpreter Sprachen sind, zieht auch irgendwie nicht. Wat issn mit Delphi und Pascal ??? Die können das und sind ... na ?
Also Olli ich bin auf Deiner Seite, suche auch noch nach einer Lösung, wenn auch nicht so intensiv, weil ich hab leider wie wir alle ja noch mehr zutun. Im Moment arbeite ich damit, das ich den kompletten SQL String aus einer Datenbank zusammenbaue, in der vorher die Feldnamen und Definitionen abgelegt sind. Man ist aber immer noch bei den Inhalten eingeschränkt und leider kann man nicht nativ mit read und write auf die Daten losgehen, sondern nur mit SQL.
Wenn Murphy und alle Götter der Programmierung mir hold sind und ich eine Lösung habe, werde ich davon sicher hier zu berichten wissen. Ich bin mir sicher es wird eine Lösung geben, wie auch immer die aussieht.
Mögen die Bits mit uns sein !
Thomas
-
Hallo,
ich bin auch eurer Meinung und bin auch an der Lösung interessiert, denn:
GEHT NICHT, GIBTS NICHT
-
Wir sind wieder mal an einer Stelle, wo es an einer genauen Beschreibung fehlt, welches Problem eigentlich gelöst werden soll. Hier werden nämlich schon wieder zwei Dinge vermischt.
@Liebhoff: siehe originärer Thread!
Zu diesem Thema hier:
Zu Interpreter Sprachen hat Baldur schon was gesagt, hier sei nur ergänzt, dass hier Flexibilität mit abnehmender Sicherheit erkauft wird: Fehler die zur Compiletime erkannt werden, treten nicht zur Laufzeit auf. Zu Delphi und Pascal sei angemerkt, dass originäres Pascal das keineswegs konnte und sich das auch nicht mit der eigentlichen Sprachphilosophie verträgt. Delphi kann sowas, ähnlich wie Java: dieser Mechanismus nennt sich Reflection und bezieht sich auch nicht auf alles innerhalb einer Klasse, sondern im wesentlichen auf die Exporte. Den Weg das in RPG zu nutzen habe ich in einem früheren Posting beschrieben.
Zum Design von sowas: auch in Java und Delphi muss man gute Gründe haben das zu nutzen, denn man bekommt nix für lau. Reflection hebelt Typprüfung aus und man kriegt Runtime Fehler (Type missmatch beim upcast), die man sonst garnicht bekommen kann, weil der Compiler einen davon abhält.
Im Falle von RPG muss man hier noch vorsichtiger sein, weil die RPG Runtime nich typsicher ist; der Compiler prüft zuwenig zur Compiletime und die Runtime weiss bei Pointern nicht auf was sie da zeigt.
Fazit: Wer unbedingt Reflection benötigt (ja, das gibt es wirklich), der sollte dafür eine Programmiersprache benutzen, die das vernünftig unterstützt. Wer das mit Gewalt (Dump auswerten ist ja wohl ein Scherz?!) in RPG versucht, liegt genauso schief, wie jemand, der eine FIBU in CL schreiben will.
D*B
Similar Threads
-
By Liebhoff in forum IBM i Hauptforum
Antworten: 20
Letzter Beitrag: 11-03-08, 09:47
-
By Kampi4 in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 09-10-06, 10:19
-
By Xanas in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-08-06, 12:21
-
By TARASIK in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 10:09
-
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
-
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