[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2006
    Beiträge
    7

    Datum überlebt ODBC Transfer auf Excel nicht

    Hallo Forum!

    Ich möchte mir von der AS400 via ODBC u. Ms Query Daten ins Excel holen.

    Das Ms Query bei den Aliasnamen u.a. Probleme macht, habe ich ein VIEW erzeugt und hole dieses problemlos ins Excel.

    Allerdings gibt's bei der Datumsumsetzung Probleme.

    Datum ist in einem nummerischen Feld zB als 20051231 gespeichert.

    Nachdem Excel 20051231 nicht als Datum erkennt habe ich in die SQL des VIEWs folgendes eingebaut:

    DATE(
    LEFT(DIGITS(o500_BELEGDAT1), 4)
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 5, 2)
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 7, 2)
    ) AS datum

    Auf der AS400 schaut's gut aus 05/12/31, aber bei der ODBC-Übertragung ins MS Query krieg ich die Fehlermeldung: "Ungültiger Wert für Datum, Zeit oder Zeitmarke"



    Ein Versuch die ganze Geschichte als String rüberzubringen ist ebenfalls erfolglos:

    CHAR(
    LEFT(DIGITS(o500_BELEGDAT1), 4)
    CONCAT '-' CONCAT
    SUBSTRING(DIGITS(o500_BELEGDAT1), 5, 2)
    CONCAT '-' CONCAT
    SUBSTRING(DIGITS(o500_BELEGDAT1), 7, 2)
    ) AS txtdatum

    Komisch ist, dass die Anzeige korrekt 2005-12-31 wiedergibt, das (CHARACTER)Feld aber 22 Zeichen lang ist...

    In Excel (bzw. MSQuery) schaut's dann so aus: F2F0F0F560F1F260F2F140

    Irgendwo ist da der Wurm drin...

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Damit habe ich eigentlich nie Probleme gehabt, allerdings solltest du das Format sicherhaltshalber immer in ISO angeben:

    DATE(
    LEFT(DIGITS(o500_BELEGDAT1), 4) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 5, 2) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 7, 2)
    ) AS datum

    Prüfe noch die ODBC-Konfig auf Datumsumsetzung *ISO, dann müsste es auch mit V4R5 klappen.
    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
    Jul 2006
    Beiträge
    7
    @ Fuerchau: Vielen Dank für die schnelle Antwort.

    Leider funktioniert die Sache nicht:

    ISO-Einstellung im ODBC-Treiber (DSN)
    habe ich gecheckt, steht auf ISO mit Trennzeichen '-'.

    DATE(
    LEFT(DIGITS(o500_BELEGDAT1), 4) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 5, 2) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 7, 2)
    ) AS datum


    Trotz der '-' sehe ich auf derAS400 das Datum im Format 05/12/31...

    Da scheint irgendeine Einstellung mein
    Wunschformat zu "overrulen" ?!?

    Daher auch der Versuch das ganze als String zu übertragen.

    Vermutlich könnte ich das Datum auch in MS-Query umformatieren, aber nachdem mir das MS-Query schon einige Streiche gespielt hat, möchte ich alle "Wünsche" als VIEW auf der AS400 hinterlegen u. das MS-Query dann nur noch übertragen lassen...

    Was also tun ?

    LG aus dem heute heißen Süden Österreichs!

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von jjagi
    Trotz der '-' sehe ich auf derAS400 das Datum im Format 05/12/31...

    Da scheint irgendeine Einstellung mein
    Wunschformat zu "overrulen" ?!?
    Das Datum ist auf in der DB2 UDB for iSeries immer als 4Byte-Binär-Wert hinterlegt und stellt die rechnerische Anzahl an Tagen seit dem 01.01.0001. (Excel seinerseits rechnet in Sekunden und setzt auf dem 1.1.1900 auf)

    Um den Binär-Wert sichtbar zu machen, kannst Du die skalare Funktion HEX verwenden:

    PHP-Code:
    Select Hex(MyDate), MyDate from MyTable 
    Datums-Formate sind dazu da, um den Binär-Wert lesbar zu machen. Auf der iSeries erkennt SQL selber die folgenden alphanumerische Darstellungen als gültiges Datum:
    JJJJ-MM-TT (= *ISO), TT.MM.JJJJ (=*EUR) und MM/TT/JJJJ (= *USA)

    Wenn Du also in einer Where-Anweisung MyDate = '01.07.2006' angibst, wird diese Darstellung in den entsprechenden Binär-Wert konvertiert.

    In welchem Datums-Format Du das Datum angezeigt bekommst, hängt davon ab, was Du eingestellt hast. Der Default-Wert für das Datum steht i.d.R auf *JOB.
    Wenn Du mit iteraktivem SQL arbeitest, kannst Du das Datums-Format wie folgt ändern:
    F13 --> Auswahl 1. --> DATFMT

    Wenn Du über iSeries Navigator arbeitest, kannst Du das Datums-Format unter JDBC-Setup einstellen.

    Für SQL-Programmierung kann das Datums-Format über ein entsprechenden SET OPTION-Statement eingestellt werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Prüfe mal deine Windows-Einstellungen, da das Anzeigeformat der Windows-Anwendungen von dort kommt.
    Systemsteuerung->Regions- und Sprachoptionen

    PS:
    Wenn du das Datum in STRSQL ansehen willst, musst du ggf. über F13 das Datumsformat auf *ISO umstellen, default ist hier *JOB.
    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
    Registriert seit
    Jul 2006
    Beiträge
    7
    vielen Dank für die informativen Antworten - wie ihr vermutlich gemerkt habt, bin ich noch eher in der Anfängerkategorie und lerne hier jeden Tag mehr!

    Ich habe jetzt
    in STRSQL das Datumsformat auf *ISO und sehe jetzt in STRSQL date() als ISO.

    In Win habe ich das Kurzdatumsformat ebenfalls auf ISO sprich JJJJ-MM-TT
    eingestellt (war TT.MM.JJJJ) und sicherheitshalber Neustart.

    MS-Query fällt trotzdem auf die Nase (Fehlermeldung wiederum: Ungültiger Wert für Datum, Zeit o. Zeitmarke)...


  7. #7
    Registriert seit
    Jul 2006
    Beiträge
    7
    hi Forum!

    Ich habe einen Workaround gefunden (das Ganze als CHAR-String). Wenn er auch nicht wirklich das Problem löst, jetzt kommt wenigstens ein ISO Format bei MS-Query heraus:

    CHAR(
    DATE(
    LEFT(DIGITS(o500_BELEGDAT1), 4) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 5, 2) concat '-'
    CONCAT SUBSTRING(DIGITS(o500_BELEGDAT1), 7, 2)
    )) AS datum


    Allerdings frage ich mich (und Euch), warum das Datum partout nicht regulär in mein Excel bzw. MS-Query will...

    LG vom "Nordbalkan" J.Jagersberger

Similar Threads

  1. EXCEL, PDF, ZIP, IDEA, e-mail, alles auf iSeries
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 22-11-06, 15:23
  2. Antworten: 4
    Letzter Beitrag: 12-06-06, 12:29
  3. MS Access Zugriff via ODBC auf iSeries Tabellen
    By Rico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 21-03-05, 09:43
  4. ODBC Datenquelle weist auf alten Server
    By HerbertH in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 27-05-04, 13:10
  5. Antworten: 2
    Letzter Beitrag: 22-08-02, 07:27

Berechtigungen

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