[NEWSboard IBMi Forum]
  1. #1
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    DBCS über ODBC/Linked Server SQL 2008 abrufen

    Hallo,

    muss von unserer AS400 über ODBC chin. Zeichen abrufen. Diese sind in einer Tabelle gespeichert mit CCSID 1388.

    Ich habe mit der ODBC-Verbindung auf einem SQL Server 2008 einen liked server erstellt.

    Select auf diese tabelle liefert mir aber nur Kauderwelsch. Ich verwende für die Verbindung zur AS400 einen User, der ebenfalls CCSID 1388 hat.

    Kann man da in der ODBC-Verbindung was einstellen?

    Danke
    HS

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich denke, du verwendest CCSID 13488. Diese ist aber bei einem User nicht einstellbar.
    Welche CCSID hast du im System (QCCSID) hinterlegt?
    Ggf. nimmt hier der QZDA-Job was anderes und schafft die Unicode-Verwendung nicht.

    Nun kann es bei ODBC noch einen anderen Grund geben.
    Für ODBC wird auf Grund ADO der default OLEDB-Treiber von Microsoft verwendet.
    Dieser meldet sich beim ODBC-Treiber noch als ODBC 2.x-Anwendung an.
    Hierbei geht der CA-Treiber nun leider davon aus, dass der Client nicht Unicodefähig ist.
    Alle Zeichenvariablen werden daher als VARCHAR an stelle von VARWCHAR übergeben.

    Hier kann nur der OLEDB-Treiber IBMDASQL weiterhelfen da dieser tatsächlich Unicodefähig ist.
    Leider musst du dazu den Verbindungsserver löschen und einen neuen Verbindungsserver als OLEDB eintragen.
    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
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364
    Hallo,
    vielen dank für die Info.
    Die CCSID des Users ist 1388 - diese steht im USRPRF (Parameter heißt auch CCSID). Die Tabelle (sehe ich mit DSPFD) hat auch CCSID 1388. Dort stehen in einem Feld DBCS-Daten (Artikelbezeichnung).

    Wenn ich in Excel-VBA mittels ODBC-Treiber ein select oder update auf diese Tabelle mache, funktioniert es mit diesem User. Mit einem anderen User, der eine andere CCSID hat, geht es nicht.

    Jedoch liefert mir der linked Server ein falsches Ergebnis.
    Ich habe diesen jetzt mal neu erstellen wollen mit IBMDASQL, bekomme aber folgende Fehlermeldung:
    (Habe alles wie zuvor gemacht nur den Provider geändert)

    Der Verbindungsserver wurde aktualisiert, der Verbindungstest für ihn ist aber fehlerhaft. Möchten Sie die Eigenschaften des Verbindungsservers bearbeiten?

    Das Datenquellenobjekt des OLE DB-Anbieters 'IBMDASQL' für den Verbindungsserver 'TEST_CCSID_1388' kann nicht initialisiert werden.
    Der OLE DB-Anbieter 'IBMDASQL' für den Verbindungsserver 'TEST_CCSID_1388' hat die Meldung 'CWBCO1004 - Auflösung der fernen Adresse nicht möglich ' zurückgeben. (Microsoft SQL Server, Fehler: 7303)

  4. #4
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364
    Nachtrag:

    Der linked Server klappt jetzt und das Ergebnis sieht jetzt anders aus, aber immer noch nicht korrekt.

    Beispiel einer Bezeichnung:
    Vorher: *&($! 35 - 37mm
    Jetzt: ???? 35 - 37mm

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    OK, ich habe das Stichwort DBCS nicht korrekt interpretiert.
    CCSID 1388 ist eine native AS/400-CCSID und kann tatsächlich nur dort verwendet werden.
    Für ODBC benötigst du eine Übersetzung in Unicode, das ist eben CCSID 13488.
    Die erreichst du am besten mit einer SQL-View, in der du alle diese Zeichenfelder per "cast(xx vargraphic(nn) ccsid 13488" oder "cast(xx nvarchar(nn))" umwandelst.
    Schwierig wird's dann nur bei Where-Klauseln, die dann auf diese Felder gehen.
    Da hilft dann ggf. ein "calculated Index".
    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

  6. #6
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364
    Vielen herzlichen Dank. Es funktioniert jetzt wie folgt:

    exec ('Select Artikel, cast(bezeichnung as nvarchar(50)) as bez FROM mybib.maytab''') AT MY_LINKED_SERVER

Similar Threads

  1. Übergabe Textfelder über ODBC an MSSQL
    By hgdieterle in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-02-15, 14:43
  2. Timestamp über ODBC
    By Wwilson in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 24-06-14, 16:26
  3. Antworten: 2
    Letzter Beitrag: 12-03-14, 20:09
  4. Excel-Tabellen über ODBC und MS-Query
    By muadeep in forum NEWSboard Windows
    Antworten: 6
    Letzter Beitrag: 14-02-05, 19:25
  5. MS Access SQL Abfrage über ODBC
    By Helwo in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-03-02, 09:01

Berechtigungen

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