JRPC3 - neuer Präkompiler für XProfan

  • Da xprofan.net mal wieder offline ist, hier die Links zur aktuellen Version von JRPC3, falls die jemand braucht:

    JRPC3-Windows-Installer

    JRPC3-ZIP-Datei

    Beide Dateien enthalten dasselbe, aber manche mochten keine Installer-EXE-Datei, deshalb gibt es das auch als ZIP-Datei.

    Die Dateien müssen ins XProfan-Basisverzeichnis installiert/kopiert werden (also dahin, wo z.B. profcomp.exe liegt).

    Gruß, Jens-Arne

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

    Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden

    Hinweis:

  • Mist, das lag daran, dass ein "https" statt ein "http" vor den Links stand. Hier die richtigen Links:

    JRPC3-Windows-Installer

    JRPC3-ZIP-Datei

    Wenn man auf die Links klickt, passiert bei mir allerdings nichts (wahrscheinlich mag Chrome keine nicht sicheren Verbindungen).

    Wenn man aber die Link-Adressen mit einem Rechtsklick herauskopiert und in einen neuen Tab eingibt, funktionieren die Downloads.

  • Hallo Jens, danke noch mal für deinen genialen PraeCompiler!

    Wenn ich in SQL Abfragen die Variablen Einbettung nutze funktioniert das leider nicht mit den kurzen Variablen. Das kann ich natürlich umgehen mit {$NoShortNames} Damit funktioniert dann alles wie gewünscht.

    Beispiel:

    SQLUpdateOrder = "BEGIN TRANSACTION
    UPDATE Z_DEXORDERS SET TRANS_CD = '04' where ex_ord_no_source = :ex_ord_no_source; COMMIT"

    Das funktioniert nur mit {$NoShortNames} oder wenn ich die Variable so wie hier in Hochkomma setze.

    SQLUpdateOrder = "BEGIN TRANSACTION
    UPDATE Z_DEXORDERS SET TRANS_CD = '04' where ex_ord_no_source = ' "+ex_ord_no_source+" ' COMMIT"

    Mit {$Declare String ex_ord_no_source} funktiniert es auch nicht. Gibt es noch andere Möglichkeiten?

  • Guten Morgen und frohe Weihnachten miteinander,

    Du musst "\:" vor den eingebetteten String schreiben, nicht bloß ":". Und bei solchen ohne Postfix muss ein ";" dahinterstehen (beides siehe XProfan-Hilfe zu "String" ganz unten). ;) Ich nehme jedenfalls mal an, dass das existierende Semikolon bei Dir nur das Commit abtrennen soll.

    Außerdem muss in dem SQL-Befehl auch bei der eingebetteten Version der zu vergleichende String in Hochkommata stehen (ex_ord_no_source = '\:ex_ord_no_source;'), da ex_ord_no_source ja offenbar ein String-Feld in der Datenbank ist.

    Ich habe aber trotzdem noch einen Bug in JRPC3 gefunden: Embedded String-Vars ohne Postfix wurden versehentlich als Integer behandelt. Das ist jetzt behoben. Also bitte auf die aktuelle Version von JRPC3 updaten (V10.08).

    Beste Grüße, Jens-Arne


    Und ich habe gerade festgestellt, dass weder XProfan noch JRPC3 mit Arrayvariablen als embedded strings umgehen können. Das könnte ich mal angehen.

    2 Mal editiert, zuletzt von Jens-Arne (25. Dezember 2023 um 10:15) aus folgendem Grund: Ein Beitrag von Jens-Arne mit diesem Beitrag zusammengefügt.

  • Und ich habe gerade festgestellt, dass weder XProfan noch JRPC3 mit Arrayvariablen als embedded strings umgehen können. Das könnte ich mal angehen.

    Auch von mir frohe Weihnachten miteinander.

    Das hatte RGH irgendwo in den Foren schon gesagt, daß nur einfache Variablen gehen.

    Ich denke, das ist auch nur eine Ersetzung, ähnlich wie die Escape-Sequenzen. Bei Arrays,

    Bereichen bzw. Strukturen wird das wohl schwierig. Welcher Teil vom Bereich bzw. Array

    ist gemeint ? Dann höchstens eher sowas \:blub[0];

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Guten Morgen!

    Allen noch Frohe Weihnachten gehabt zu haben :saint:

    Ich benutze es wie in der Hilfe beschrieben. Im Prä-Compilermodus O funktioniert das :/ Siehe Hilfe

    Damit funktionieren auch Arrayvariablen das habe ich schon probiert, also so etwas wie :Suche[0]; auch ohne Hochkomma... Mit PostFix geht das zum Beispiel nicht... (:Suche$[0])

    Das Semikolon war tatsächlich nicht für das Commit ;) sondern für die embeddet Variable.


    Viele Grüße und danke für eure Mühe das hier am leben zu erhalten!

    PS: Update mache ich heute wenn ich wieder arbeite ^^

  • Hallo,

    es bleibt aber dabei, dass da das "\" fehlt. Das ist ja eine spezielle Escape-Sequenz (eben mit dem Doppelpunkt), und Escape-Sequenzen beginnen in XProfan immer mit einem Backslash.

    Heinz: Ja, es geht nur darum, ein bestimmtes Array-Element anzusprechen. Das wäre in der ausgeschriebenen Variante ja auch so ("..."+@str$(blub[0])+"..." = "...\:blub[0]...").

  • Aber in reinem XProfan geht es doch nicht.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Guten Morgen,

    ich muss mich entschuldigen..

    Es steht sogar in der Hilfe bei den Escape-Sequenzen

    Aber warum funktioniert das dann nur so? Mit dem "\" davor geht es weder mit SQLite noch mit MSSQL oder MySql.

    Heinz: Ich denke die eingebetteten Variablen werden nur im SQL übersetzt.

    Ich habe die neueste sqlite dll angehängt die muss in dem Verzeichnis liegen.

  • Ich denke die eingebetteten Variablen werden nur im SQL übersetzt.

    Normalerweise wird das ja VOR slExec übersetzt und dann dieser ersetzte

    String übergeben. Das ist ja Sinn und Zweck dieser Sache.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Meinst du im String selbst?

    So wie ich es bisher immer benutze und in der SQL Hilfe steht, werden die Variablen beim Übertragen an den sql server eingebettet. Nicht davor.

    Ein übersetzen davor müsste nach den normalen Regeln erfolgen mit Hochkomma etc.

    So wie hier:

    declare String art_no

    declare String SQLAbfrage

    SQLAbfrage = "Select art_no,desc_1,desc_2 from Barticles where art_no = ' "+art_no+" ' "

    db("sqlexec",SQLAbfrage,0)

    Mit den Embedded Variablen habe ich es seit jeher so gemacht wie es in der Hilfe im Abschnitt SQL steht nur mit :$ oder :; ohne dem \ davor.

    Hast du mal den Code oben ausprobiert?

    VG

  • Ja, der Code funktioniert so, wie in deinem Beispiel.

    Ich habe jetzt auch mal bei SQLExec in der Hilfe nachgelesen.

    Das scheint dann nochmals ein spezielle Variante, eben für SQLExec, zu sein.

    Es gibt ja auch noch andere Situationen, bei denen embedded Vars nützlich

    sind. Da hätte RGH das einheitlich regeln müssen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Schade das Roland nicht mehr reagiert.. Weiß jemand wie es ihm geht?

    Ich habe gerade mit "normalen" Embedded Variablen gespielt:

    Einmal editiert, zuletzt von A.Berse (28. Dezember 2023 um 13:48)

  • Schade das Roland nicht mehr reagiert.. Weiß jemand wie es ihm geht?

    Die letzten Monate scheint er gar nicht mehr hier im Forum gewesen zu sein.

    Ich schaue hier öfter bei den Mitgliedern unter Benutzer online. Sonst konnte ich

    ein paar mal die Woche sehen, daß er online war, wenn auch nicht immer hier in

    der Profan-Abteilung.

    Bin ich ehrlich gesagt von ihm nicht gewöhnt, daß er wortlos hier die Bühne verläßt.

    Vielleicht ist er auch krank geworden und es ist ihm nicht (mehr) möglich, hier was

    zu schreiben oder sich überhaupt PC-mäßig einzuloggen. Da können wir als Außenstehende

    nur vermuten.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Ach du lieber Himmel... Da muss ich mich ebenfalls entschuldigen. Ich wusste nicht, dass es da eine spezielle Variante für SQL-Statements gibt. Damit muss ich mich noch einmal intensiv befassen, das sollte aber hinzubekommen sein. Bis dahin funktioniert für JRPC3 mit kurzen Variablennamen nur die normale Variante mit "\:" und Hochkommata davor und dahinter.

  • Ich wusste nicht, dass es da eine spezielle Variante für SQL-Statements gibt.

    Ich vermute das jedenfalls mal.

    Darum, weil es mit SQL geht und mit normalem XProfan eben nicht.

    Kann ja sein, daß die Exec-Befehle eine Sonderbehandlung erfahren.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Guten Morgen zusammen ;) Hier muss sich keiner entschuldigen.. jens!

    Ich benutze die internen Variablen schon länger nur mit prä und suffix also :$ aber bei einem Test war mir aufgefallen das die Arrays ohne suffix auch im direkten sql funktionieren. Das hat mich natürlich gefreut.. Die sql abfragen / Transactions lege ich seit längerem in einer DLL ab, diese sind dann mit einem pw verschlüsselt. Damit kann ich an diesen arbeiten, ohne in den Code eingreifen zu müssen.

    Also kann man quasi xprofan variablen direkt an den sql Server übergeben.

    So wie hier werden Laborwerte von einem vorgelagerten System in unser ERP System übertragen. Es geht nur um den oberen Teil wo die SQL Variablen deklariert und mit denen aus XProfan gefüllt werden.

    Das hier jetzt aber eben auch Array Variablen funktionieren, freut mich sehr damit kann ich noch mal mehr machen.


    Code
  • V10.11:

    Es funktionieren jetzt beliebige Array-Variablen, auch mit "normalen" eingebetteten Variablen.

    Die speziellen SQL-Statement-embedded vars funktionieren jetzt ebenfalls, alles auch mit kurzen Variablennamen.

    Das mit den kurzen Namen dürfte aber bei der Auslagerung in eine DLL nicht mehr hinzubekommen sein. Da müssen dann lange Variablennamen verwendet werden, weil JRPC3 die Namen in der DLL ja nicht entsprechend anpassen kann.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!