[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2005
    Beiträge
    6

    ODBC - Sonderzeichen INSERT auf I5 klappt nicht

    Wenn wir mit dem Linux iSeries-ODBC-Treiber ein INSERT Statement mit Sonderzeichen (z.B. ÄÖÜ ...) absetzen, bekommen wir folgende Fehlermeldung:

    SQL error: [unixODBC][IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0104 - Error message text unavailable. Message can not be translated successfully., SQL state 37000 in SQLExecDirect

    Ein SELECT auf I5-Daten mit Sonderzeichen klappt ohne Probleme.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Der SQL0104 deutete auf einen Syntaxfehler des Insert's hin.
    Das hat mit Sonderzeichen nichts zu tun.
    Stelle den vollständigen SQL mal hier rein.

    Übrigens:
    Die SQL-Fehler kannst du auf der AS/400 mit
    DSPMSGD RANGE(SQL0104) MSGF(QSQLMSG)
    anschauen.
    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
    Feb 2005
    Beiträge
    6

    Unhappy

    Ein Syntax-Fehler kann es eigentl. nicht sein, da der gleiche INSERT Befehl ohne Sonderzeichen einwandfrei funktioniert.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das häufigste Problem sind nicht die Sonderzeichen, sondern dynamische SQL's die die Daten zusammenstellen:

    insert into mytable (f1, f2, ...) values (123, 'xxx', ...)

    Alphafelder sind genau dann das Problem, wenn sie selber wieder Hochkomma enthalten !
    In diesem Fall sind die Hochkommata nämlich zu verdoppeln !!!

    Besser ist es immer mit sogenannten Parametern zu arbeiten:

    insert into mytable (f1, f2, ...) values (?, ?, ...)

    Jedem Parameter kann dann ein Wert zugewiesen werden und per Execute ausgeführt werden.
    Ein gravierender Vorteil: Die Syntax wird nur 1 Mal geprüft. Die Feldinhalten werden dann sehr schnell übertragen.

    Prüfe deine Zeicheninhalte auf Hochkomma !
    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
    Feb 2005
    Beiträge
    6
    Es waren nur 2 Test-Statements, das Erste lautetet:

    INSERT INTO BIBLIOTHEK.TABLE (Nummer,Textfeld) VALUES (123456,'ABC')

    und funktionierte. Das Zweite:


    INSERT INTO BIBLIOTHEK.TABLE (Nummer,Textfeld) VALUES (123456,'ÄÖÜ')

    und lief nicht. Komisch, komisch ...

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    In irgendeiner Form scheint das 'ÄÖÜ' nicht so auf der AS/400 anzukommen. Sonst würde kein Syntaxfehler (SQL0104) gemeldet werden.
    Es scheint ein Problem der Hex-Darstellung zu sein. Nun kenne ich mich mit Linux nicht aus, aber versuch mal anstelle von Konstanten im Insert ParameterMarker "?" zu verwenden.
    Parametermarker werden mit entsprechenden SQL-API's gebunden:
    SQLBindParameter bzw. SQLPutParameter o.ä.

    Du kannst auch auf der AS/400 mal einen IP-Trace aufsetzen um zu sehen, was denn tatsächlich übertragen wird:
    TRCTCPAPP APP(*DATABASE) SET(*ON) RMTNETADR(*INET '192.186.1.5')
    mit TRCTCPAPP APP(*DATABASE) SET(*OFF) wird dann ein Protokoll ausgegeben.
    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
    May 2002
    Beiträge
    2.642

    ODBC Sonderzeichen

    Hallo,
    vielleicht hilft dies:

    Problem: A Linux® application using the iSeries ODBC driver for Linux® received a SQL0104 token not valid error. The error occurred only when the SQL statement contained literals that used characters outside the invariant character set.

    The isql utility shipped with versions of unixODBC prior to June 2003 does not call the setlocale() function and may run into this problem.

    Resolution: The Linux® ODBC driver is using the locale set up by the application to convert the SQL statement. If the application does not set up the locale in its main(), the default compiler "C" locale is used. This implies a client code page of 367 is used for some client conversions. Code page 367 does not support many characters outside the invariant character set. The main application must ensure the locale is set up properly.

    #include <locale.h>
    int main( int argc, char* argv)
    {
    setlocale( LC_ALL, "" ) ;
    }

  8. #8
    Registriert seit
    Feb 2005
    Beiträge
    6
    Danke für den Tipp, leider können wir den Eintrag nicht machen, da wir
    das RPM-Packet direkt mit SUSE 9.2 installiert haben.

  9. #9
    Registriert seit
    May 2002
    Beiträge
    2.642

    Link

    Hallo,
    vielleicht hilft Dir dieser Link:
    http://www-1.ibm.com/servers/eserver...roperties.html

    in dem Bereich "Translation properties" CCSID

Similar Threads

  1. Emailprotokoll auf i5?
    By Blaumeise in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 17-11-06, 12:19
  2. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 08:29
  3. Neue Möglichkeiten mit SQL auf i5 / iSeries / AS400
    By Fondue in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 28-04-06, 19:40
  4. oxaion erfolgreich auf i5 getestet
    By ralfmh in forum Archiv NEWSboard Events
    Antworten: 1
    Letzter Beitrag: 07-10-04, 11:17
  5. ODBC Datenquelle weist auf alten Server
    By HerbertH in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 27-05-04, 13:10

Berechtigungen

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