[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2011
    Beiträge
    38

    Datentransfer zum MS SQL-Server (CCSID?)

    Hallo,
    wir müssen Daten aus der i5 auf einen SQL-Server übertragen. Idealerweise sollte sie über eine OLEDB Verbindung vom SQL-Server abgeholt werden.
    1. Problem: ich bekomme den Treiber nicht kopnfiguriert. Der Kontakt zur i5 funktioniert zwar, aber der Job auf der i5 läuft immer auf einen Fehler wg. unbekannter Zeichen, die vom SQL Server gesendet werden.

    Also hab ich nicht OLEDB sindern ODBC genutzt. Fein, das geht, Daten sind da. Aber:
    2. Problem: das Euro Zeichen in Textfeldern wird nicht korrekt übernommen. Alles andere schon.

    Deshalb hier die Frage: kennt sich da jemand mit aus? Wer macht sowas schon regelmäßig und kann helfen?

    Grüße

    Siggi

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das Euro-Zeichen ist tatsächlich ein Problem und kann nicht so einfach übernommen werden.
    Bei der ODBC- (auch OLEDB-) Verbindung wird die Systemsprache als CCSID automatisch gesetzt. Bei Deutsch ist das nun mal 273.
    Desweiteren liegt es an der CCSID der Datei.

    Wenn nun ein Terminal mit 1141 das Euro-Zeichen eingibt, die Datei aber auf 273 steht, kann leider kein Eurozeichen zurückkommen.
    Da nun SQL auch von Datei in Job-CCSID wandelt muss der Umweg über Unicode genommen werden.
    Hier hilft nun mal wieder nur der berühmte 3-fach-cast:

    cast(cast(cast(feld as char(nn) ccsid 65535) as char(nn) ccsid 1141) as graphic(nn) ccsid 13488)

    Da die Daten ja in 1141 eingegeben sind aber in der Datei in 273 gespeichert wurden folgt der cast folgenden Regeln:

    1. cast in *HEX = keine Umwandlung
    2. cast in 1141 = keine Umwandlung
    3. cast in 13488 = Umwandlung von 1141 in Unicode

    Ggf. scheitert das noch am SQL-Server.
    Da ja intern inzwischen immer mit OLEDB gearbeitet wird und der ODBC-OLEDB "MSDASQL" nicht Unicodefähig ist, kann es hier trotzdem zum Verlust des Eurozeichens kommen.

    Korrekt wäre da trotzdem die Verwendung des IBMDASQL.
    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 2011
    Beiträge
    38
    danke!

    ich habe inzwischen mal die Daten über ein RPG Programm als ifs datei im csv Format ausgegeben. Ich habe die CCSID 1252 bei der Erstellung benutzt.
    Dort stehen alle Zeichen jetzt korrekt drin. Ist aber eben csv...mühsam zu importieren...

    Grüße
    Siggi

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Enfacher gehts doch mit CREATE VIEW, die das alles enthält und dann aus der View importieren.
    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 2011
    Beiträge
    38
    verstehe ich das richtig: du meinst, eine View so definieren, dass sie die Datenkonvertierung durchführt und dann diese in den SQL-Server importieren?

    Grüße
    Siggi

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ja, warum denn nicht?
    Dies gilt sowieso für diese Art der Zugriffe .

    - kein Update/Insert/Delete möglich (= mehr Sicherheit)
    - Konvertierungen, Anpassungen, Joins u.v.m.

    Das Problem beim Zugriff über Linked-Server ist die Abfragetechnik ins besonders bei Joins. Das erledigt man besser über Views.
    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
    Mar 2002
    Beiträge
    5.365
    ... ich habe gerade mal mit ArdGate geklimpert, Job auf 1141 stellen, insert into... passt! (Seltsamerweise habe ich dann beim select von der AS/400 auf den SQL Server Probleme das in der Mocha Emu anzuzeigen...)

    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/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Problem siehe oben:
    QZDASOINIT geht per Default auf QCCSID bzw. Sprache des Users der sich anmeldet (USRPRF-Einstellungen).
    Wenn QCCSID/USRPRF = *HEX, dann nimm aus Sprache die CCSID.
    Bei DEU gibt das leider immer 273 und nicht 1141.

    Wenn die Datei also auf 1141 steht, wird im SQL-Job auf 273 gewandelt und da geht das Euro-Zeichen verloren bevor es für den SQL-Server in ANSI übersetzt wird.
    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
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Problem siehe oben:
    QZDASOINIT geht per Default auf QCCSID bzw. Sprache des Users der sich anmeldet (USRPRF-Einstellungen).
    Wenn QCCSID/USRPRF = *HEX, dann nimm aus Sprache die CCSID.
    Bei DEU gibt das leider immer 273 und nicht 1141.

    Wenn die Datei also auf 1141 steht, wird im SQL-Job auf 273 gewandelt und da geht das Euro-Zeichen verloren bevor es für den SQL-Server in ANSI übersetzt wird.
    ... falls Du das auf ArdGate beziehst, da gibt es keinen QZDASOINIT, die Daten gehen als binärdaten von RPG an Java und werden dort per JDBC nach und von SQL Server geschrieben/gelesen. Mit CCSID 273 kommt was anderes an, wie mit CCSID 1141. Bei 273 sieht AS/400 seitig alles toll aus (wohl MIMO Prinzip), bei 1141 ist die SQL Server Seite ok, aber beim lesen kommt was falsch umgesetztes bei DB2/400 an...
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Was die IBM-Schnittstelle angeht, so wird ja je Feld die CCSID der Daten mitgegeben, so dass die Umwandlung von dir vorgenommen werden müsste.
    Welche Methoden da die Java-Toolbox der AS/400 bietet kenne ich nicht.
    Java arbeitet ja bei Strings generell in Unicode, so dass bei der Umwandlung von Strings in SBCS-Daten und retour die richtige Codepage ausgewählt sein 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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... nicht ganz:
    wenn der Job eine CCSID hat, wird auf SQL Ebene alles, was eine CCSID hat in die JobCCSID gewandelt (dabei geht bei 273 das Euro Zeichen flöten). Bei der Umsetzung innerhalb von ArdGate werden die Daten dann von der JobCCSID nach Java gewandelt (wird wohl UTF8 sein), der JDBC Treiber kümmert sich dann drum das in die Datenbank (hier SQL Server) zu schaffen.
    Beim schreiben von DB2/400 in SQL Server funzt das mit 1141, mit 273 ist der Euro futsch (landet in einem Ersatzzeichen KennIchNicht).
    Auf dem Rückweg ist im Java noch alles paletti und dann klemmt es irgendwo bei der Rückkonvertierun oder/und Anzeige (Umlaute OK Euro futsch.

    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/

Similar Threads

  1. AS400 auf SQL Server
    By DEVJO in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 12-10-06, 18:28
  2. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  3. iSeries Access ODBC Driver und MS SQL Server ...
    By rcauchy in forum NEWSboard Windows
    Antworten: 1
    Letzter Beitrag: 23-06-05, 13:28
  4. MS Sql Server + iSeries -> Verbindungsserver
    By reraru in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 20-04-05, 13:07
  5. AS/400 Zugriff via Linked Server unter SQL Server 2000
    By epsih2 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 29-11-04, 10:06

Berechtigungen

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