[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Registriert seit
    Mar 2010
    Beiträge
    19
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dann probier doch folgendes:

    Select * from SENDUNG where cast(FELD as char(nn) ccsid 273) = 'Nürnberg'

    wobei nn die originale Feldlänge ist.
    Worin besteht der Unterschied zu meinem Select? Vielleicht sehe ich es nur nicht:

    Ja - das habe ich wie folgt probiert:

    Code:
    Select * from SENDUNG where cast(FELD as char(50) ccsid 273) =  'Nürnberg'

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    ... der CAST von dem Feld ändert den Wahrheitsgehalt des Statements nicht, sondern nur die Ergebnismenge, die dann von leer auf Inhalt wechseln könnte.
    Für mich sieht das eher so aus, dass der SQL String von legal nach illegal wechselt, so von der Art wenn ich
    "select * from irgendwas where name =" + Name
    gegen die Datenbank schicke und in Name dann O'Hara drin steht.
    Deswegen war der Ansatz mit dem prepared Statement erst mal richtig.

    D*B
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dann probier doch folgendes:

    Select * from SENDUNG where cast(FELD as char(nn) ccsid 273) = 'Nürnberg'

    wobei nn die originale Feldlänge ist.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Dann gäb's zumindest einen SQL-Fehler und keinen Hänger.
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Die Codepages kannst du getrost vergessen, da 037 (USA-Englisch) zwischen 5250 und Datenbank ja korrekt passt, selbst wenn die DB 65535 hat.

    Du kannst allerdings auch die DB-CCSID auf 037 per CHGPF ändern, dann sollte es eigentlich gehen.

    Wichtig ist da nun eher, deinen SQL zu berichtigen.
    Irgendwie wird wohl den 'Nürnberg' in 'N\ffrnberg' übersetzt. Wobei "\ff" eigentlich Hex(FF) gemeint ist und das wirst du nie finden (oder ist das nur eine Anzeige im Debugger ?).

    Auch wegen Dieters Hinweis emfehle ich dringend Parametermarker!!!

    Desweiteren:
    Hast du für dein C++-Programm UNICODE definiert ?
    Dann musst du auch über die ODBC-Konfig den SQL-String als Unicode verwenden.

    Verwendest du ADO-Objekte oder native SQL-Routinen (SQLExecute, SQLConnect, CLI) ?

    Wenn Du mit Parametermarkern arbeitest, kannst du den Parametertyp dann auch auf WCHAR setzen.

    Ansonsten musst du in deinem Programm den SQL-String auf char[xx] anpassen und die Werte in Singlebyte konvertieren (Makro W2A).
    Besser ist jedoch die Verwendung der ADO-Klassen.
    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
    Aug 2003
    Beiträge
    1.508
    hast du schon probiert das gleiche phänomen auch bei anderen tabellen und unterschiedlicher CCSID auftritt?
    zumindest testhalber würde ich das auch mit parameter probieren, denn diese sollten die konvertierungen automatisch vornehmen!

  6. #6
    Registriert seit
    Mar 2010
    Beiträge
    19
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    hast du schon probiert das gleiche phänomen auch bei anderen tabellen und unterschiedlicher CCSID auftritt?
    zumindest testhalber würde ich das auch mit parameter probieren, denn diese sollten die konvertierungen automatisch vornehmen!
    Ist mit Parametern das 'Casting' gemeint?
    Das habe ich schon probiert.
    Aber nochmal, nicht dass wir uns misverstehen.
    Ich tippe den Select per Hand in eine ODBC SQL Tool ein.

    Ich verwende also zum Testen keine C++ Programmierung.

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    nein, mit parametern ist was ganz anderes gemeint. schau dir mal den link den ich anfangs gepostet hab genauer an.
    zuerst dein sql-string:
    tab = "select * from tab where sp1 = ?"
    und dann ein parameterobjekt, welches für das "?" eingesetzt wird.
    das machst du aber nur in einem selbst programmierten programm (c++, c#, ...)

    das heißt du verwendest also ein nicht selbst geschriebenes pgm um dein select abzusetzen? wenn ja, wie heist dieses pgm?

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Ich habe das jetzt mit V5R4 und einer Tabelle mit CCSID 65535 ausprobiert.
    Beim Select gibt es absolut keine Probleme, die Daten werden korrekt gefunden und angezeigt.

    Es gibt aber ein CCSID-Problem.

    Ich denke, du hast keine andere Chance als
    a) die CCSID der PF zu korrigieren
    oder
    b) eine View mit Casting auf die korrekte CCSID anzulegen
    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.368
    ... die CCSID der Tabelle ist da m.E. Banane, wenn da was faul ist, werden keine Sätze (oder die falschen gefunden). Dieses Problem hier muss auf der Strecke Frontend Treiber CCSID des Database Dämons liegen - und zusätzlich muss da auch noch ein Bug/Inkompatibilität im Spiel sein; entweder sollte da ein SQL Code zurückkommen (Statement wird invalid) oder eben SQL Code 100 (nix gefunne).

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich habe das jetzt mit V5R4 und einer Tabelle mit CCSID 65535 ausprobiert.
    Beim Select gibt es absolut keine Probleme, die Daten werden korrekt gefunden und angezeigt.

    Es gibt aber ein CCSID-Problem.

    Ich denke, du hast keine andere Chance als
    a) die CCSID der PF zu korrigieren
    oder
    b) eine View mit Casting auf die korrekte CCSID anzulegen
    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
    Mar 2010
    Beiträge
    19
    Code:
    CREATE TABLE VSART
    (
      DATE_CRE TIMESTAMP,
      DATE_UPD TIMESTAMP,
      D_LEISTER VARCHAR(12),
      NAME VARCHAR(50),
      TXT VARCHAR(254),
      USER_CRE VARCHAR(10),
      USER_UPD VARCHAR(10),
      VERKEHRZWG VARCHAR(1),
      VERKEHRZWG2 VARCHAR(2),
      VERKEHRZWG_INL VARCHAR(1),
      VERKEHRZWG_INLE VARCHAR(1),
      VERSANDART VARCHAR(3) NOT NULL,
      MANDANT INTEGER  DEFAULT 0
    ) CCSID 1252;
    Wir haben nun versucht eine Tabelle anzulegen, die die korrekte Codepage hat. Leider geht das nicht, da der Token bzw. der Bezeichner hinter CCSID nicht erkannt wird.

    SELECT character_set_name from sysibm.syscharsets
    zeigt keine der Codepages an, die wir auf Windowsseite haben.

Similar Threads

  1. Antworten: 9
    Letzter Beitrag: 16-03-09, 15:25
  2. CPYFRMSTMF Umlaute
    By helm in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 24-07-08, 12:09
  3. Druckproblem bei Umlauten und Eurozeichen
    By Bitverdreher in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-06-08, 09:23
  4. Datei aus IFS mit falschen Umlauten
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-12-07, 15:35
  5. Umsetzung von Umlauten
    By DEVJO in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 24-03-05, 11:29

Berechtigungen

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