Steven_Lucky
5th January 2006, 17:07
Hallo!

Wir möchten die Möglichkeit haben mit MS-Access Baan-Oracle-Tabellen einzubinden und dort Reports zu erstellen.

Ich habe eine ODBC-Datenquelle für die Baan-Ora-Instanz eingerichtet.

Funktioniert auch soweit bei einfachen Tabellen wie z.B. BAAN_TTIITM000100
aber bei BAAN_TTIITM001100 kommt ein reservierter Fehler -7666 und in jeder
Spalte wird ?Fehler angezeigt. Ich vermute ein Problem wenn der Treibe ein bestimmtes Datums-Feld nicht richtig konvertieren kann!

Ich habe zur Definiton der ODBC-Datenquelle sowohl den MS-Oracle-Treiber als auch den Oracle-Treiber Version 9.02 verwendet und auch Access 97 und Access 2003, aber immer das gleiche negative Ergebnis!

Folgende Threads habe ich im baanboard schon gefunden. Diese beschreiben, dass es den Fehler auch bei anderen gibt, aber leider ohne Lösung!

http://www.baanboard.com/baanboard/showthread.php?t=7820

http://www.baanboard.com/baanboard/showthread.php?t=25949&highlight=access

Steven_Lucky
5th January 2006, 18:19
Ein bisschen was konnte ich selber schon rausfinden. Es liegt definitiv an einem Datums-Format, welches der ODBC-Treiber nicht konvertieren kann. In der Baan Tabelle ttiitm001100 wird in dem Feld t$lcod für ein fehlendes Datum (Leerfeld) der Eintrag "01-Jan-10000 12:00:00 AM" erzeugt. Dieser Eintrag ist in sehr vielen Datensätze zu finden! Den Inhalt habe ich aus dem Feld mit der Oracle-Enterprise-Manager-Console ausgelesen.

Man müsste daher eigentlich nur den Eintrag "01-Jan-10000 12:00:00 AM" mit MS-Access-Mitteln richtig konvertieren.

Wenn ich mit select t$lcod from baan.ttiitm001100 where t$lcod > "#01.01.1900#" eingebe, dann bekomme ich auch ein normales Ergebnis in Access, d.h. alle Datensätze ohne die Einträge "01-Jan-10000 12:00:00 AM".

bdittmar
10th January 2006, 15:13
Ein bisschen was konnte ich selber schon rausfinden. Es liegt definitiv an einem Datums-Format, welches der ODBC-Treiber nicht konvertieren kann. In der Baan Tabelle ttiitm001100 wird in dem Feld t$lcod für ein fehlendes Datum (Leerfeld) der Eintrag "01-Jan-10000 12:00:00 AM" erzeugt. Dieser Eintrag ist in sehr vielen Datensätze zu finden! Den Inhalt habe ich aus dem Feld mit der Oracle-Enterprise-Manager-Console ausgelesen.

Man müsste daher eigentlich nur den Eintrag "01-Jan-10000 12:00:00 AM" mit MS-Access-Mitteln richtig konvertieren.

Wenn ich mit select t$lcod from baan.ttiitm001100 where t$lcod > "#01.01.1900#" eingebe, dann bekomme ich auch ein normales Ergebnis in Access, d.h. alle Datensätze ohne die Einträge "01-Jan-10000 12:00:00 AM".

Hallo,
da das Feld, das letzte Zaehldatum im Artikelstamm ist, duerfte der Fehler nur bei Kosten- und Dienstleistungsartikel auftreten, wenn mal eine Inventur durchgefuehrt wurde.

Wenn man diese Artikelarten ausschliesst, duerfte der Fehler nicht mehr auftreten.

Oder in dieses Feld ein Dummy-Date setzen.

MFG

Steven_Lucky
12th January 2006, 11:14
Das mit dem Dummy-Date haben wohl auch schon andere User gemacht, habe einen Thread gefunden unter http://forums.oracle.com/forums/thread/.jspa?messageID=759162򹕺

Hier erwähnt ein Baan-User, dass er einfach den 01.01.10000 in 01.01.9999 geändert hat.

csecgn
12th January 2006, 11:42
Hier erwähnt ein Baan-User, dass er einfach den 01.01.10000 in 01.01.9999 geändert hat.
Über das Datum 01.01.9999 schimpft ein Kollege der sich mit unserem DataWarehouse beschäftigt immer. Er sagt, das währe das Datum das Baan bei einem leeren Datum (0 im Datumsfeld) unter Oracle abspeichert.

Gruß
csecgn

bdittmar
12th January 2006, 11:43
Das mit dem Dummy-Date haben wohl auch schon andere User gemacht, habe einen Thread gefunden unter http://forums.oracle.com/forums/thread/.jspa?messageID=759162򹕺

Hier erwähnt ein Baan-User, dass er einfach den 01.01.10000 in 01.01.9999 geändert hat.


Hallo,

so extrem wuerde ich das Dummy-Datum nicht setzen, es kann zu Problemen kommen.
(Wenn in der licmon das Enddatum vor dem 31.12.9999 liegt)
Ich setze das Datum zum 31.12.2099, ich denke, das ist weit genug in der Zukunft.

MFG

Steven_Lucky
24th January 2006, 11:41
Delivered with your Baan installation there is a script in $BSE/lib/ora called cnvdate.sql (War aber bei uns nicht vorhanden, hat mir der Support dann noch gemailt).

This script needs to be run by Oracle user SYS

This script will convert all the empty date fields in the Baan tables with the date; 01/01/-4712 00:00:00. To be abe to read the date in a correct way you need to specify the date format in the query:

select TO_CHAR(T$LCOD, 'MM/DD/SYYYY HH24:MI:SS')"Date"
from ttiitm001100;

To enable the Baan database driver to read these velues in the correct way you need to add a parameter to $BSE/lib/defaults/db_resource

ora_date:1

Some Additional info regarding this issue:

Convert representation of the empty Baan date.

The Baan/Oracle driver has a resource that controls the empty
date representation in the Oracle database.

ora_date:0 (default) Jan. 1st -9999
ora_date:1 Jan. 1st -4712

The Baan-Oracle driver uses the date Jan. 1st -9999 as the
representation of the empty Baan date.

When setting the ora_date:1 resource in the $BSE/lib/defaults/db_resource
file, the empty date representation is Jan. 1st -4712.

This is done because PL/SQL, SQL*Plus and SQL*Loader are not able
to handle dates before Jan. 1st -4712.

In BaanERP 5.0 and higher only the Jan. 1st -4712 representation is used.

ulrich.fuchs
24th January 2006, 17:45
Ich meine mich düster zu entsinnen, dass ich dieses vermaledeite Problem irgendwann im schönen Jahr 2000 mal mit einer Oracle-Datenbank hatte. Gelöst haben wir es, wenn ich mich recht erinnere, unter Verwendung des "Decode"-Befehls der Oracle-Datenbank in den Select-Statements, mit dem zuerst abgeprüft wurde, ob der Feldwert < -1000 (oder so) ist, und abhängig davon dann eben null oder der Feldwert zurückgegeben wurde. Dafür muss man das SQL für die Access-View aber per Hand schreiben, der Zusammenklick-Assistent funktioniert dann nicht mehr.

Vielleicht nur mal so als Ansatz, leider habe ich kein Code-Schnipsel mehr parat.

Ulrich

Steven_Lucky
3rd February 2006, 12:38
Ich habe nun den Lösungsvorschlag des SSA-Supports durchgeführt und das Skript cnvdate.sql gestartet. Dadurch wurden die leeren Datums-Werte in allen Baan-Tabellen auf 01.01.-4712 geändert.

Mit Oracle-SQL-Plus z.B. auslesbar mit "select TO_CHAR(T$LCOD, 'MM/DD/SYYYY HH24:MI:SS') from ttiitm001100.

In MS-Access allerdings muss man eine sogenannte Pass-Through-Abfrage erzeugen, da diese dann direkt auf der Oracle-DB ausgeführt wird und nur das endgültige Ergebnis zurückliefert. Die Syntax: "SELECT TO_CHAR(T$LCOD, 'DD.MM.SYYYY HH24:MI:SS') AS LCOD
FROM OracleSIDName.TTIITM001100"

Ich hoffe nicht nur mir damit geholfen zu haben, vielleicht kann es ja noch jemand gebrauchen... :)