[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    290

    JVAGATE mit Sonderzeichen in CHAR-Feldern

    Hallo zusammen,
    ich verwende JVAGATE für den Zugriff auf verschiedene ext. Datenbanken, funktioniert alles super. (Thx DB).
    Jetzt ist eine Oracle-DB (FIBU) dazugekommen, funktioniert auch generell.
    Die Verarbeitung habe ich in SQLRPG-Pgm's, dort connecte ich zu den DB's, Öffne Cursor, leses Sätze, schließe Cursor und schliesse die Verbindung wieder !

    Mein Problem
    In manchen Sätzen sind Sonderzeichen wie z.B. "%" gespeichert, und ich falle beim FETCH in meinem SQLRPG-Pgm auf die Nase, SQL-Code ist dann -969!
    Mit dem DB-Tool SQuirreL funktioniert der Zugriff fehlerfrei !

    Das kann doch nur bedeuten, dass ich am/in meinem SQLRPG-Pgm in Sachen "Zeichensatz" etwas "machen" muss, oder ???

    Danke vorab + Vg.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Also "%" ist noch kein Sonderzeichen sondern bewegt sich noch im ASCII-Bereich.
    Oracle speichert i.d.R. in UTF8, also Unicode.
    Wenn deine Hostvariablen vom Typ "C" sind (UCS2), hast du mit Oracle keine Probleme.
    Willst du die Daten im RPGLE konvertieren benötigt dein Job zur Laufzeit eine gültige CCSID!
    *HEX (65535) geht da nicht mehr!!!
    Dann konvertiert die Zuweisung (eval) automatisch zwischen UCS2 und deinem SBCS-Feld.
    Aber Achtung: UCS => SBCS führt bei nicht konvertierbaren Zeichen zu "?".

    Wichtig bei der ganzen Sache ist noch, dass du auf jeden Fall mit Parametermarkern arbeitest.
    Also:

    MySQL = 'Select a, b, c from OracleTab where K1=?';
    execute SQL prepare Statement ….
    execute SQL open MyCursor using : HostK1;

    Ähnliches musst du dann auch mit Insert/Update/Delete machen, der Fetch benötigt das ja sowieso schon.
    Parametermarker vereinfachen das Handing i.Ü. und beschleunigen erheblich, da nicht ständig prepared werden muss.
    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 2003
    Beiträge
    290
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Also "%" ist noch kein Sonderzeichen sondern bewegt sich noch im ASCII-Bereich.
    Oracle speichert i.d.R. in UTF8, also Unicode.
    Wenn deine Hostvariablen vom Typ "C" sind (UCS2), hast du mit Oracle keine Probleme.
    Willst du die Daten im RPGLE konvertieren benötigt dein Job zur Laufzeit eine gültige CCSID!
    *HEX (65535) geht da nicht mehr!!!
    Dann konvertiert die Zuweisung (eval) automatisch zwischen UCS2 und deinem SBCS-Feld.
    Aber Achtung: UCS => SBCS führt bei nicht konvertierbaren Zeichen zu "?".

    Wichtig bei der ganzen Sache ist noch, dass du auf jeden Fall mit Parametermarkern arbeitest.
    Also:

    MySQL = 'Select a, b, c from OracleTab where K1=?';
    execute SQL prepare Statement ….
    execute SQL open MyCursor using : HostK1;

    Ähnliches musst du dann auch mit Insert/Update/Delete machen, der Fetch benötigt das ja sowieso schon.
    Parametermarker vereinfachen das Handing i.Ü. und beschleunigen erheblich, da nicht ständig prepared werden muss.

    Danke...aber der SQL-Befehl ist fix und fertig, ich arbeite an dieser Stelle nicht mit "using"...

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... same procedure as every year:
    - log4j auf debug stellen
    - restart des Serverprozesses
    - im logfile nachsehen
    - nix gefunden? mit minimalisiertem Beispiel an D*B schicken.

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

  5. #5
    Registriert seit
    Jan 2003
    Beiträge
    290
    Zitat Zitat von BenderD Beitrag anzeigen
    ... same procedure as every year:
    - log4j auf debug stellen
    - restart des Serverprozesses
    - im logfile nachsehen
    - nix gefunden? mit minimalisiertem Beispiel an D*B schicken.

    D*B
    Hallo D*B,
    danke...
    - log4j auf debug stellen
    ...das sind diese hier ???
    thx.

    Click image for larger version. 

Name:	jvagate_log4j.png 
Views:	3 
Size:	15,7 KB 
ID:	534

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    bei der vorletzten Zeile den # rausmachen
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    "
    ich arbeite an dieser Stelle nicht mit "using"..." ist halt häufiger ein Problem gerade bei der Verwendung von Unicode.
    Das SQL-Statement selber ist meist nicht Unicode und somit könnte man nicht mit Unicodedaten im SQL arbeiten.

    Dieter schreibt allerdings auch einiges ins Joblog.
    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

  8. #8
    Registriert seit
    Jan 2003
    Beiträge
    290
    Zitat Zitat von BenderD Beitrag anzeigen
    bei der vorletzten Zeile den # rausmachen
    Danke, werde ich heute Abend testen, wenn ich alleine zugreife.
    Thx.

  9. #9
    Registriert seit
    Jan 2003
    Beiträge
    290
    Hallo D*B
    ich bin hier nun ein Stück weiter, es sind nicht (unbedingt) Sonderzeichen die zum Fehler führen.
    In der Oracle DB sind die Infofelder, die der Anwender durchaus auch mit Sonderzeichen beschreibt, im Format 4000 VARCHAR.
    Wenn ich ohne CAST arbeite, läuft beim ArdGate etwas über (ich habe die Fehlermeldung gerade nciht, aber irgendetwas mit Index und > 257, kann ich aber noch wieder "produzieren").
    Ich habe jetzt mit CAST die Infofelder auf 256 Stellen begrenzt und komme damit dann auch erst einmal weiter.
    Danke + Vg.

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... hast Du die aktuelle Version, ich erinnere mich dunkel an eine Fehlerbehebung. Ansonsten wäre ein Beispiel und das log hilfreich.

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

  11. #11
    Registriert seit
    Jan 2003
    Beiträge
    290
    Ich glaube ich habe nicht die aktuelle Version, ich habe vor ein paar Wochen (Monaten :=( ) ) gesehen, dass es eine "neue" Version gibt, habe die auch geladen, aber noch nicht installiert, bin ich einfach nicht zu gekommen.
    Das werde ich aber nun zuerst machen, danach probiere ich es nochmals aus.
    Ich melde mich wieder dazu...
    Danke + Vg.

Similar Threads

  1. JVAGATE und SQLRPG auf lokale DB2 for i
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 25-06-19, 11:59
  2. jvagate Bander tool Verbindung -> Oracle Hilfee
    By labm in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 05-06-18, 09:09
  3. Problem mit JVAGATE von D.Bender
    By svit in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 18-09-14, 12:14
  4. SQLRPGLE Infos zu verwendeten Feldern auslesen
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 25-03-14, 14:41
  5. %char ??
    By Gimli in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 04-03-03, 16:20

Berechtigungen

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