Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MDB-Version ermitteln aus binary

663 views
Skip to first unread message

Thomas Winkler

unread,
Nov 10, 2009, 11:10:56 AM11/10/09
to
Hallo allerseits,

wie kann man aus einer MDB-Datei die Format-Version ermitteln? Ich
brauche eine Lᅵsung die "von auᅵen", d. h. ohne Access die Version
ermitteln kann.

Habe da an das binᅵre Auslesen eines/einiger Bytes aus dem MDB-Header
gedacht - nur weis ich weder wie der Header aufgebaut ist, noch an
welcher Position die MDB-Version zu finden ist.

Kᅵnnt Ihr mir da weiterhhelfen?

Thomas

--
"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."

Sascha Trowitzsch

unread,
Nov 10, 2009, 3:38:50 PM11/10/09
to
Thomas Winkler wrote:
> Hallo allerseits,
>
> wie kann man aus einer MDB-Datei die Format-Version ermitteln? Ich
> brauche eine Lᅵsung die "von auᅵen", d. h. ohne Access die Version
> ermitteln kann.
>
> Habe da an das binᅵre Auslesen eines/einiger Bytes aus dem MDB-Header
> gedacht - nur weis ich weder wie der Header aufgebaut ist, noch an
> welcher Position die MDB-Version zu finden ist.
>
> Kᅵnnt Ihr mir da weiterhhelfen?

Ich kann dir nur mit einer ADO-Routine helfen, die z.B. auch per VB-Script
ausgefᅵhrt werden kᅵnnte:

Function GetMDBVersion(strDB As String) As String
Dim oConx As Object

Set oConx = CreateObject("ADODB.Connection")
oConx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& strDB
oConx.Open
GetMDBVersion = oConx.Properties("Jet OLEDB:Engine Type")
oConx.Close
End Function

Ciao, Sascha

Jens Schilling

unread,
Nov 10, 2009, 3:44:01 PM11/10/09
to
Hallo, Thomas

Thomas Winkler wrote:

> wie kann man aus einer MDB-Datei die Format-Version ermitteln? Ich

> brauche eine L�sung die "von au�en", d. h. ohne Access die Version
> ermitteln kann.

Schau mal, ob Dir dies hilft:

http://msdn.microsoft.com/en-us/library/aa139959%28office.10%29.aspx

Dort kannst Du zum Download die ODC_AcFormat.exe finden, die widerum eine
mdb enth�lt, die mdbs und adps aus Verzeichnissen nach dem DB-Format als
Bericht auflistet.

Vielleicht hilfts Dir ja ....


--
Gruss
Jens

FAQ: http://www.donkarl.com


Thomas Winkler

unread,
Nov 11, 2009, 12:23:30 PM11/11/09
to
Hallo Jens,

> Vielleicht hilfts Dir ja ....

In der Tat. Vielen Dank.

Der Code...

Const VERSION_STRING_SIZE As Integer = 24
Const JET_2_VERSION_NUMBER_START As Integer = 1
Const JET_VERSION_NUMBER_START As Integer = 21
Const LENGTH As Integer = 1

Open strDB_file For Binary As lngSource
strData = Space(VERSION_STRING_SIZE)
Get #lngSource, , strData
Close lngSource

If Chr(1) = Mid(strData, JET_2_VERSION_NUMBER_START, LENGTH) Then
theVersion = "Microsoft Access 2"
ElseIf Chr(0) = Mid(strData, JET_VERSION_NUMBER_START, LENGTH) Then
theVersion = "Microsoft Access 97"
ElseIf Chr(1) = Mid(strData, JET_VERSION_NUMBER_START, LENGTH) Then
theVersion = "Microsoft Access 2000/2002"
Else
theVersion = "Unable to determine the version " & _
"of database file"
End If

funktioniert und kann A2, A97 und A2000/A2002 DBs auseinander halten.

Allerdings fehlt mir nun noch A2k3 und A2k7. Hat da jemand noch paar infos?

Danke.

Sascha Trowitzsch

unread,
Nov 11, 2009, 1:02:21 PM11/11/09
to
Hi Thomas,

Was ist mit dem Code aus meinem anderen Post?
Ich benutze den selbst. Er kann nur A2000 und A2003-Formate nicht
unterscheiden.
A2000 ist's aber dann, wenn die Tabelle MSysAccessObjects existiert. ;-)

Das oben ist mir nicht klar: Was soll A2000/A2002 sein?
A2000 ist ungleich A2002 ...

Ciao, Sascha

Jens Schilling

unread,
Nov 11, 2009, 1:18:14 PM11/11/09
to
Hallo, Sascha

Sascha Trowitzsch wrote:
> Das oben ist mir nicht klar: Was soll A2000/A2002 sein?
> A2000 ist ungleich A2002 ...

Ich hab' grad noch mal nachgeschaut - es wird nur die Jet-Version
imterpretiert:

Zitat:
[...] the first 24 bytes of the header of each file to determine the
version of Jet used to create the file. From this, we infer the version of
Access that created the current file.

Josef Poetzl

unread,
Nov 11, 2009, 1:48:35 PM11/11/09
to
Hallo!

Jens Schilling schrieb:


> Ich hab' grad noch mal nachgeschaut - es wird nur die Jet-Version
> imterpretiert:
>
> Zitat:
> [...] the first 24 bytes of the header of each file to determine the
> version of Jet used to create the file. From this, we infer the version of
> Access that created the current file.

Ich probierte ein wenig mit Database-Properties herum.
Interessant sind vermutlich Version und AccessVersion

Meine Testergebnisse:
Version 3.0 + AccessVersion 07.53 = Ac97
Version 4.0 + AccessVersion 08.50 = Ac2000
Version 4.0 + AccessVersion 09.50 = Ac2002 (2003)
Version 12.0 + AccessVersion 09.50 = Ac2007

Version steht f�r die Jet- bzw. ACE-Version.
Aber kann mir jemand erkl�ren, was die Eigenschaft "AccessVersion"
aussagen soll? Ich bin urspr�nglich davon ausgegangen, dass das jene
Version ist, aus der die mdb erstellt wurde bzw. als ersten ge�ffnet
wurde. Wenn man eine mdb/accdb nur �ber die DBEngine erstellt, fehlt
n�mlich diese Eigenschaft.
Warum steht aber bei einer accdb, die ich mit Ac2007 erstellte, eine 9
wie bei AcXP?


mfg
Josef

--
EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Thomas Winkler

unread,
Nov 12, 2009, 2:45:02 AM11/12/09
to
Hallo Sascha,

> Was ist mit dem Code aus meinem anderen Post?
> Ich benutze den selbst. Er kann nur A2000 und A2003-Formate nicht
> unterscheiden.

Ich habe ihn leider noch nicht ausprobieren k�nnen. Das kommt aber noch
und ich berichte hier.

> Das oben ist mir nicht klar: Was soll A2000/A2002 sein?
> A2000 ist ungleich A2002 ...

Es wird nur die JET-Version ausgewertet und diese ist f�r A2k und A2k2
gleich. Darum k�nnen diese nicht ohne Weiteres unteschieden werden.

Jetzt bin ich dabei das "ohne Weiteres" zu kl�ren.

> A2000 ist's aber dann, wenn die Tabelle MSysAccessObjects existiert. ;-)

Also unterscheidet die Existenz dieser Tabelle 2k von 2k2 oder 2k/2k2
von 2k3? Oder anders: ist diese Tabelle *nur* bei A2k vorhanden?

Danke.

Thomas

BTW: Das ganze flie�t in ein OpenSource Projekt zum DB-Management
(ReverseEngineering, Design, Migration, ERD, etc...) ein. Demn�chst
gibt's ein Release mit experimentellem Access-Support. Ist es hier
erw�nscht, zu verk�nden, wann es soweit ist?

Henry Habermacher

unread,
Nov 12, 2009, 2:58:23 AM11/12/09
to
Hallo Thomas

Thomas Winkler wrote:
>> A2000 ist's aber dann, wenn die Tabelle MSysAccessObjects existiert. ;-)
>
> Also unterscheidet die Existenz dieser Tabelle 2k von 2k2 oder 2k/2k2
> von 2k3? Oder anders: ist diese Tabelle *nur* bei A2k vorhanden?

Migrierst Du eine 2k MDB nach 2k2 und wieder zur�ck nach 2k bleibt (oder
zumindest blieb damals) die MSysAccessObjects bestehen.

Gruss
Henry


--
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Gerald Aichholzer

unread,
Nov 12, 2009, 3:09:33 AM11/12/09
to
Hallo Thomas,

Thomas Winkler wrote:
> (ReverseEngineering, Design, Migration, ERD, etc...) ein. Demn�chst
> gibt's ein Release mit experimentellem Access-Support. Ist es hier
> erw�nscht, zu verk�nden, wann es soweit ist?

arbeitest du an diesem Projekt weiter:
http://sourceforge.net/projects/mdbtools/

Falls nicht, schau mal rein - vielleicht findest du dort
etwas Brauchbares.

lG,
Gerald

Thomas Winkler

unread,
Nov 12, 2009, 3:18:38 AM11/12/09
to
Hallo Gerald,

> arbeitest du an diesem Projekt weiter:
> http://sourceforge.net/projects/mdbtools/

Nein, es ist nicht mdbtools. :-)

> Falls nicht, schau mal rein - vielleicht findest du dort
> etwas Brauchbares.

Danke f�r den Hinweis. Aber dort hatte ich schon nachgeguckt und nichts
gefunden.

THX

Thomas

Thomas Winkler

unread,
Nov 12, 2009, 3:50:33 AM11/12/09
to
Hallo,

> Migrierst Du eine 2k MDB nach 2k2 und wieder zur�ck nach 2k bleibt (oder
> zumindest blieb damals) die MSysAccessObjects bestehen.

Gestestet unter A2k2:

MDB erstellt: standardm��ig im 2k-format
-> MSysAccessObjects vorhanden

nach 2k2-format konvertiert:
-> MSysAccessObjects *nicht* vorhanden

wieder zur�ck nach 2k-format
-> MSysAccessObjects wieder vorhanden

Thomas

Thomas Winkler

unread,
Nov 12, 2009, 3:53:20 AM11/12/09
to
Hallo,

> Also unterscheidet die Existenz dieser Tabelle 2k von 2k2 oder 2k/2k2
> von 2k3? Oder anders: ist diese Tabelle *nur* bei A2k vorhanden?

Die Frage konnte ich mir jetzt selbst beantworten. In den Versionen
*vor* 2k2 (getestet bis A97) gibt's die MSysAccessObjects. In 2k2 ist
sie nicht mehr vorhanden - auch wenn man dorthin *konvertiert*.

Das bringt mich auf die Idee die sp�teren Versionen anhand ihrer
MSys*-Tabellen zu unterscheiden. Kann mir mal bitte jemand alle
MSys*-Tabellen einer mit A2k7 neu erstellten ACCDB nennen (habe kein A2k7)?

THX

Thomas

Gunter Avenius

unread,
Nov 12, 2009, 4:14:27 AM11/12/09
to
Hallo Thomas,

Thomas Winkler schrieb folgendes:
...


> Kann mir mal bitte jemand alle
> MSys*-Tabellen einer mit A2k7 neu erstellten ACCDB nennen (habe kein A2k7)?

MSysAccessStorage
MSysACEs
MSysComplexColumns
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships

Gru�
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com

home: http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de

12. Access-Entwickler-Konferenz (AEK)
N�rnberg 10./11.10.2009 und 31.10/1.11.2009
http://www.donkarl.com/?AEK

Thomas Winkler

unread,
Nov 12, 2009, 4:23:21 AM11/12/09
to
Hallo Gunter,

> MSysAccessStorage
> MSysACEs
> MSysComplexColumns
> MSysNavPaneGroupCategories
> MSysNavPaneGroups
> MSysNavPaneGroupToObjects
> MSysNavPaneObjectIDs
> MSysObjects
> MSysQueries
> MSysRelationships

Vielen Dank f�r die Liste. 2k7 kann ich also anhand der
MSysComplexColumns unterscheiden. K�nntest Du mir bitte noch eine leere,
frisch erstellte 2007er ACCDB zum download bereitstellen damit ich mir
das ganze nochmal bin�r zu Gem�te f�hren kann?

Gunter Avenius

unread,
Nov 12, 2009, 4:42:52 AM11/12/09
to
Hallo Thomas,

Thomas Winkler schrieb folgendes:

> Vielen Dank f�r die Liste. 2k7 kann ich also anhand der

> MSysComplexColumns unterscheiden. K�nntest Du mir bitte noch eine leere,
> frisch erstellte 2007er ACCDB zum download bereitstellen damit ich mir

Tabellen in A2007 leere Datenbanken:

accdb:


MSysAccessStorage
MSysACEs
MSysComplexColumns
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships

mdb 2002/2003:
MSysAccessStorage
MSysACEs


MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships

mdb 2000:
MSysAccessObjects
MSysACEs


MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries

Link f�r Datenbanken:
http://www.file-upload.net/download-2005959/Dbs.zip.html

Thomas Winkler

unread,
Nov 12, 2009, 5:05:21 AM11/12/09
to
Hallo Gunter,

Sauber! Das is ja mehr als ich erhoffte. :-)

BTW: Anhand der MSysNavPane*-Tabellen kann man auch erkennen dass die
MDBs mit A2k7 erstellt wurden. Die Fehlen n�mlich mei mir.

Josef Poetzl

unread,
Nov 12, 2009, 5:45:33 AM11/12/09
to
Hallo!

Thomas Winkler schrieb:


> BTW: Anhand der MSysNavPane*-Tabellen kann man auch erkennen dass die
> MDBs mit A2k7 erstellt wurden. Die Fehlen n�mlich mei mir.

Da w�re ich etwas vorsichtig bzw. w�rde zumindest "erstellt" auf
"ge�ffnet" �ndern. ;-)

Die "blanke" ACE-DB (mit DBEngine.CreateDatabase erstellt) enth�lt nur
die Tabellen:
MSysACEs
MSysComplexColumns
MSysObjects
MSysQueries
MSysRelationships

Die MSysNavPane*-Tabellen kommen dazu, wenn man die DB mit Ac07
�ffnet.

Gunter Avenius

unread,
Nov 12, 2009, 6:46:42 AM11/12/09
to
Hallo,

Josef Poetzl schrieb folgendes:


> Die MSysNavPane*-Tabellen kommen dazu, wenn man die DB mit Ac07
> �ffnet.

... oder mit der Access GUI erstellt ;-)

Sascha Trowitzsch

unread,
Nov 12, 2009, 9:12:48 AM11/12/09
to
Hi,

Thomas Winkler wrote:
> Hallo Gerald,
>
>> arbeitest du an diesem Projekt weiter:
>> http://sourceforge.net/projects/mdbtools/
>
> Nein, es ist nicht mdbtools. :-)
>
>> Falls nicht, schau mal rein - vielleicht findest du dort
>> etwas Brauchbares.
>
> Danke f�r den Hinweis. Aber dort hatte ich schon nachgeguckt und
> nichts gefunden.

Naja, ich hab den C-Quellcode f�r die MDBTOOLS, der in leicht ge�nderter
Form auch von Kexi verwendet wird.
( http://www.freshports.org/databases/keximdb/ ) Bringt aber nix.
Es ist kein Wunder, dass beide Projekte eingeschlafen sind, weil sich
niemand die M�he machte, die urspr�nglich von Brian Burns (in 2000)
erstellte Version weiterzuentwickeln und auf die neueren Access-Formate
auszudehnen. ;-)

Ciao, Sascha

Sascha Trowitzsch

unread,
Nov 12, 2009, 9:18:17 AM11/12/09
to
Hi,

Gunter Avenius wrote:
> Hallo,
>
> Josef Poetzl schrieb folgendes:
>> Die MSysNavPane*-Tabellen kommen dazu, wenn man die DB mit Ac07
>> �ffnet.
>
> ... oder mit der Access GUI erstellt ;-)

...und au�erdem bleiben sie bestehen, wenn man nach A2003/3
runterkonvertiert. ;-)
Das ist also kein verl�ssliches Kriterium.

Ich insistiere auf meinem oben geposteten Code!
Connection.Properties("Jet OLEDB:Engine Type")
gibt f�r eine A97er 4 zur�ck, f�r A2000 ff. die 5 und f�r A2007 eine 6.
Den Rest kann man �ber die MSys-Tabellen ermitteln.

Ciao, Sascha

Henry Habermacher

unread,
Nov 12, 2009, 8:20:05 PM11/12/09
to
Hallo Thomas

Thomas Winkler wrote:
>> Migrierst Du eine 2k MDB nach 2k2 und wieder zur�ck nach 2k bleibt (oder
>> zumindest blieb damals) die MSysAccessObjects bestehen.

> MDB erstellt: standardm��ig im 2k-format


> -> MSysAccessObjects vorhanden
>
> nach 2k2-format konvertiert:
> -> MSysAccessObjects *nicht* vorhanden
>
> wieder zur�ck nach 2k-format
> -> MSysAccessObjects wieder vorhanden

Kann durchaus sein, dass das sp�ter noch ge�ndert wurde. Ich bin ganz
sicher, das war nicht immer so, kann aber dann auch ein Fehler gewesen sein.
Ich hatte damals n�mlich untersucht, wieso eine zur�ck konvertierte MDB, die
vorher fast leer war, nach dem Zur�ckkonvertieren nicht wieder die
Originalgr�sse angenommen hat und dann eben diese Tabelle gefunden, die dann
aber unter A2k nicht mehr gesch�tzt war und weggeputzt werden konnte.

Henry Habermacher

unread,
Nov 12, 2009, 8:41:09 PM11/12/09
to
Hallo Gunter

Gunter Avenius wrote:
> Thomas Winkler schrieb folgendes:
> ...
>> Kann mir mal bitte jemand alle
>> MSys*-Tabellen einer mit A2k7 neu erstellten ACCDB nennen (habe kein
>> A2k7)?
>
> MSysAccessStorage
> MSysACEs
> MSysComplexColumns
> MSysNavPaneGroupCategories
> MSysNavPaneGroups
> MSysNavPaneGroupToObjects
> MSysNavPaneObjectIDs
> MSysObjects
> MSysQueries
> MSysRelationships

Bevor wir hier auf Holzwege gef�hrt werden: Wenn jemand eine MDB mittels
DAO/Jet erstellt, also ohne Access, fehlen da ettliche der genannten
Tabellen (das war schon seit Versionen so). Diese werden von Access
hinzugef�gt, wenn die MDB das erste mal mit Access ge�ffnet werden. Access
macht das, um da drin seine Objekte abzulegen. Jet alleine hat mit den
Access Objekten eigentlich gar nichts am Hut, f�r Jet sind das Tabellen, wie
andere Benutzerdefinierte Tabellen. Und diese legt eben dann Access an.

Hier ein einfaches VB-Script:
Option Explicit
Dim daoObject
Dim db
Dim strMsg
Dim I
Const conDBName = "~$TEST$~.mdb"
On Error Resume Next
Set daoObject = CreateObject("DAO.DBEngine.36")
Set db = daoObject.OpenDatabase(conDBName, _
False, False)
if Err Then
Err.Clear
Set db = daoObject.CreateDatabase(conDBName, _
";LANGID=0x0409;CP=1252;COUNTRY=0")
End If
If Err Then
MsgBox Err.Description
End If
strMsg = Null
For I = 0 To db.TableDefs.Count - 1
strMsg = (strMsg + Chr(13) & Chr(10)) & _
db.TableDefs(I).Name
Next
MsgBox strMsg, , "Systemobjekte"
db.Close
Set db = Nothing
Set daoObject = Nothing

Ergebnis:
DAO.DBEngine.36 legt folgende Tabellen an:
MSysACEs
MSysObjects
MSysQueries
MSysRelationships

Nach dem �ffnen mit Access 2007 und nochmaligem Starten des Scripts sind da
zus�ztlich:
MSysAccessStorage
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs

angelegt worden. Es ist also nicht m�glich, anhand der Tabellen die Frage
des OPs im Subject zu beantworten. Mit dem anschauen der MSysAccess... oder
MSysNav... Objekte findet man also nur raus, welche Access Version da
verwendet worden ist, nicht welche MDB-Version es ist.

Thomas Winkler

unread,
Nov 16, 2009, 4:14:24 AM11/16/09
to
Hallo Sascha,

> Ich kann dir nur mit einer ADO-Routine helfen, die z.B. auch per
> VB-Script ausgefᅵhrt werden kᅵnnte:
>
> Function GetMDBVersion(strDB As String) As String
> Dim oConx As Object
>
> Set oConx = CreateObject("ADODB.Connection")
> oConx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=" & strDB
> oConx.Open
> GetMDBVersion = oConx.Properties("Jet OLEDB:Engine Type")
> oConx.Close
> End Function

Das Projekt ist in Java geschrieben und der Zugriff auf die MDB erfolgt
ᅵber die JDBC-ODBC-Brᅵcke. Das erzeugte java.sql.Connection-Object
verfᅵgt zwar ᅵber einige Methoden um die Eigenschaften der Connection
auszulesen (getMetaData()), den "Engine Type" allerdings konnte ich
nicht finden - wohl aber die JET Version.

Danke trotzdem.

Thomas Winkler

unread,
Nov 16, 2009, 5:23:52 AM11/16/09
to
Hallo allerseits,

zuerst einmal vielen Dank fᅵr die vielen Tips und Hinweise.

Ich muss mein Problem wohl nocheinmal etwas klarer formulieren, da ich
selbst nicht ausreichend zwischen binᅵrem Auslesen und der Verwendung
einer Connection differenziert habe.

Hauptanliegen ist es, die MDB-Version *ohne* das Herstellen einer
Verbindung zu ermitteln. D. h. es muss anhand verschiedener Bit- oder
Byte-Muster (mᅵglichst exakt) erkannt werden, um welche MDB-Version es
sich handelt. Bisher ist mir das so direkt noch nicht gelungen.

Einzig die zum Erstellen der MDB genutzte JET/ACE-Engine kann ich bisher
ermitteln und damit (recht ungenau) die MDB-Version "schᅵtzen". Damit
lᅵsst sich folgendes ermitteln:

Jet 2 -> 2.0
Jet 3 -> 97
Jet 4 -> 2000, 2002 oder 2003
ACE -> 2007

Nun bleiben nach Ermittlung der Jet Version zwei Unsicherheiten:
- Was ist mit Access 95?
- Wie halte ich die 200X-Versionen auseinander?

Wenn sich nun A2000 von den 2002/2003-er dadurch unterscheidet, dass
eine Tabelle "MSysAccessObjects" existiert, kᅵnnte man diesen String in
der MDB-Datei suchen. Damit hᅵtte man im Idealfall 2000 erkannt.

Man mᅵsste aber im WorstCase 2GB durchsuchen, was nicht gerade
performant ist. Gibt es irgendwo ein Offset, ab dem im binary die
Tabellen(namen) aufgelistet werden? Die Frage lᅵuft letztendlich auf
eine Format-Beschreibung hinaus. Kennt jemand soetwas?

Was ist aber, wenn in einer 2002er ein beliebiges Objekt mit diesem
Namen per Hand anlegt? Wie halte ich 2002 und 2003 auseinander?

Kann mir vielleicht noch jemand eine leere A95 oder/und A2.0 MDB
zukommen lassen und deren MSys*-Tabellen nennen?

Danke.

Sascha Trowitzsch

unread,
Nov 16, 2009, 8:25:17 AM11/16/09
to
Hi Thomas,

Das allerdings hᅵttest du ruhig schon frᅵher erwᅵhnen kᅵnnen, dass es sich
um Java handelt...
Aber auch das reicht mir noch nicht, um das Vorhaben wirklich zu verstehen:
Auf welcher Plattform soll das laufen?
Falls Windows: Welche OS-Versionen sollen unterstᅵtzt werden?
Oben sprichst du von JDBC-Bridge, hier von Auslesen ohne jegliche
Connection; was jetzt? Ist ODBC erlaubt?

Ich habe im Netz noch keinerlei Informationen zum MDB/ACCDB-Format gefunden,
das neuer, als von 2001 wᅵre - und das reicht hier nicht.
Insofern wirst du selbst forschen mᅵssen, wenn du rein binᅵr auslesen
willst, wobei mir sowas, wie einfach nur nach Strings der Tabellennamen zu
suchen, nicht ausreichend erscheint.
Falls das Ganze unter Windows laufen soll, verstehe ich aber immer noch
nicht, warum man kein ADO-Connection-Objekt verwenden kann. Das geht doch
auch mit Java?

Mit A2.0/95-DBs kann ich leider nicht dienen.

Ciao, Sascha


Thomas Winkler

unread,
Nov 16, 2009, 8:58:56 AM11/16/09
to
Hallo Sascha,

> Das allerdings hᅵttest du ruhig schon frᅵher erwᅵhnen kᅵnnen, dass es
> sich um Java handelt...

Sorry. Meinte ursprᅵnglich, das wᅵre egal.

> Aber auch das reicht mir noch nicht, um das Vorhaben wirklich zu verstehen:
> Auf welcher Plattform soll das laufen?
> Falls Windows: Welche OS-Versionen sollen unterstᅵtzt werden?

Das Programm lᅵuft auf allen Platformen und nur auf Windows OSen auch
Access anbieten. Das ganze soll auch (mᅵglichst) unabhᅵngig von der
Windows-Version sein - d. h. die aktuellen (ab 2k) sollten schon
funktionieren.

> Oben sprichst du von JDBC-Bridge, hier von Auslesen ohne jegliche
> Connection; was jetzt? Ist ODBC erlaubt?

Das Programm liest/schreibt natᅵrlich Tabellen ᅵber eine Connection
(JDBC-ODBC-Bridge) aus/in die MDB und nicht binᅵr. :-)

Nur wenn der Rechner kein MDAC, Jet, kein Office 2007 etc installiert
hat, scheitert das Aufbauen einer Connection mit einem nichtssagenden
Fehler. In diesem Falle soll die MDB "geparst" werden und der Benutzer
zur Installation der passenden Engine mit einem Link dazu aufgefordert
werden.

> Ich habe im Netz noch keinerlei Informationen zum MDB/ACCDB-Format
> gefunden, das neuer, als von 2001 wᅵre - und das reicht hier nicht.
> Insofern wirst du selbst forschen mᅵssen, wenn du rein binᅵr auslesen
> willst, wobei mir sowas, wie einfach nur nach Strings der Tabellennamen
> zu suchen, nicht ausreichend erscheint.

Das reicht mir eben auch nicht weils ziemlich fehleranfᅵllig ist.

> Falls das Ganze unter Windows laufen soll, verstehe ich aber immer noch
> nicht, warum man kein ADO-Connection-Objekt verwenden kann. Das geht
> doch auch mit Java?

Denke schon. Aber IMHO ist doch auch fᅵr die ADO-Connection die
entsprechende Engine nᅵtig, oder irre ich da? D. h. zu dem Zeitpunkt zu
dem ich die ADO-Connection einsetzen wᅵrde ist eigentlich schon klar,
dass es nichts wird. :-(

Henry Habermacher

unread,
Nov 17, 2009, 12:00:27 AM11/17/09
to
Hallo Thomas

Thomas Winkler wrote:
> Nur wenn der Rechner kein MDAC, Jet, kein Office 2007 etc installiert
> hat, scheitert das Aufbauen einer Connection mit einem nichtssagenden
> Fehler. In diesem Falle soll die MDB "geparst" werden und der Benutzer
> zur Installation der passenden Engine mit einem Link dazu aufgefordert
> werden.

Wieso muss es die passende Engine sein? Selbst die ACE ist doch backward
kompatibel und kann IIRC selbst Jet3 (oder Jet 2.5) MDBs bearbeiten, oder
tᅵusche ich mich?

> Denke schon. Aber IMHO ist doch auch fᅵr die ADO-Connection die
> entsprechende Engine nᅵtig, oder irre ich da? D. h. zu dem Zeitpunkt zu

Siehe oben

Thomas Winkler

unread,
Nov 17, 2009, 3:10:02 AM11/17/09
to
Hallo Henry,

> Wieso muss es die passende Engine sein? Selbst die ACE ist doch backward
> kompatibel und kann IIRC selbst Jet3 (oder Jet 2.5) MDBs bearbeiten,
> oder tᅵusche ich mich?

Ich dachte, ACE wᅵre abwᅵrts bis Jet 4 kompatibel. Darunter brᅵuchte man
Jet <= 4. Aber Du verunsicherst mich jetzt und ich nehme das zum
Anlass nochmal genauer nachzuforschen.

THX

Thomas Winkler

unread,
Dec 7, 2009, 5:35:44 AM12/7/09
to
Hallo an alle Interessierten,

> BTW: Das ganze flie�t in ein OpenSource Projekt zum DB-Management
> (ReverseEngineering, Design, Migration, ERD, etc...) ein. Demn�chst
> gibt's ein Release mit experimentellem Access-Support. Ist es hier
> erw�nscht, zu verk�nden, wann es soweit ist?

Da es keine Gegenstimmen gibt, erlaube ich mir das angesprochene Release
zu verk�nden:

Mogwai ERDesignerNG v2.5.0 steht jetzt unter

http://sourceforge.net/projects/mogwai/

zum Download zur Verf�gung.


Bugreports bitte unter
http://sourceforge.net/tracker/?atid=510777&group_id=65384&func=browse
posten.

Feature Requests bitte unter
http://sourceforge.net/tracker/?atid=510780&group_id=65384&func=browse
posten.

Thomas

Siegfried Schmidt

unread,
Dec 7, 2009, 9:40:28 AM12/7/09
to
Thomas Winkler schrieb:

> Da es keine Gegenstimmen gibt, erlaube ich mir das angesprochene

> Release zu verkᅵnden:

Das sieht wirklich gut aus.

Gibts fᅵr den Export der Gesamtansicht eine Grᅵᅵenbeschrᅵnkung? Ich bekomme
bei einem Projekt nur Bilder mit Lᅵnge Null.


Siegfried

Thomas Winkler

unread,
Dec 7, 2009, 10:00:57 AM12/7/09
to
Hallo Siegfried,

> Das sieht wirklich gut aus.
>
> Gibts fᅵr den Export der Gesamtansicht eine Grᅵᅵenbeschrᅵnkung? Ich bekomme
> bei einem Projekt nur Bilder mit Lᅵnge Null.

Welches Bildformat hast Du gewᅵhlt?
Wieviele Tabellen hast Du?

Bisher sind keine solche Probleme bekannt. Allerdings gib's
Bildbetrachter (IrfanView, GIMP), die mit der SVG-Anzeige manchmal
Probleme haben. Das erzeugte SVG ist aber fehlerfrei und wird dann auch
von InkScape ordentlich angezeigt.

Siegfried Schmidt

unread,
Dec 7, 2009, 5:25:49 PM12/7/09
to
Thomas Winkler schrieb:

> Welches Bildformat hast Du gewᅵhlt?

Bei png, jpg, bmp und svg der gleiche Effekt.

> Wieviele Tabellen hast Du?

250 Tabellen, 50 Views, 450 Fremdschlᅵssel-Constraints

Mit einigen wenigen Tabellen gehts.

> Bisher sind keine solche Probleme bekannt. Allerdings gib's
> Bildbetrachter (IrfanView, GIMP), die mit der SVG-Anzeige manchmal
> Probleme haben. Das erzeugte SVG ist aber fehlerfrei und wird dann
> auch von InkScape ordentlich angezeigt.

Betrachter scheidet aus, die Dateien sind definitiv leer. Das Programm
rechnet beim Export einige Zeit bis es wieder ansprechbar ist, bringt aber
keine Fehlermeldung.

Siegfried

Thomas Winkler

unread,
Dec 7, 2009, 6:22:07 PM12/7/09
to
Hallo Siegfried,

>> Wieviele Tabellen hast Du?
>
> 250 Tabellen, 50 Views, 450 Fremdschlᅵssel-Constraints

Na das is schon eine ganz schᅵne Menge - aber sollte kein Grund fᅵr ein
Problem sein. Getestet wird stᅵndig und auch an solchen Giganten.

Welches DBMS benutzt Du? Der Access-Support ist derzeit noch in einem
sehr frᅵhen Stadium und daher auch als "experimentell" gekennzeichnet.
Produktiv einsetzbar ist es noch nicht. Wir arbeiten gerade am Auslesen
von MDBs. Wenn dass lᅵuft wird auch deren Weiterverarbeitung in Angriff
genommen.

> Betrachter scheidet aus, die Dateien sind definitiv leer. Das Programm
> rechnet beim Export einige Zeit bis es wieder ansprechbar ist, bringt aber
> keine Fehlermeldung.

OK. Gibt's in der Konsole einen Stacktrace? Dann ᅵffne bitte einen Bug
im genannten Bugtracker und fᅵge den Stacktrace mit ein. Wenn mᅵglich,
bitte auch ein als MXM-gespeichertes Datenmodell. Das vereinfacht das
Nachvollziehen ungemein. Wenn Du ein Problem damit hast, dein Modell im
ᅵffentlichen Tracker zu posten, kann ich Dir auch eine Mail-Adresse geben.

HTH

Thomas

Siegfried Schmidt

unread,
Dec 9, 2009, 11:20:43 AM12/9/09
to
Thomas Winkler schrieb:

> Na das is schon eine ganz schᅵne Menge - aber sollte kein Grund fᅵr
> ein Problem sein. Getestet wird stᅵndig und auch an solchen Giganten.

Es gibt einen Heap-ᅵberlauf beim Exportieren. Erst dachte ich dass es an
der Anzahl der Objekte liegt, tatsᅵchlich ist der Fehler aber nur von der
Darstellungsgrᅵsse abhᅵngig, d.h. bei vielen Tabellen ist er durch
Rᅵcknahme des Zoomfaktors vermeidbar (dass letzteres fᅵr den Export eine
Rolle spielt sollte vielleicht in der Doku deutlich stehen).

> OK. Gibt's in der Konsole einen Stacktrace? Dann ᅵffne bitte einen Bug
> im genannten Bugtracker und fᅵge den Stacktrace mit ein. Wenn mᅵglich,
> bitte auch ein als MXM-gespeichertes Datenmodell. Das vereinfacht das
> Nachvollziehen ungemein. Wenn Du ein Problem damit hast, dein Modell
> im ᅵffentlichen Tracker zu posten, kann ich Dir auch eine Mail-Adresse
> geben.

Ich muss noch etwas experimentieren...


Siegfried


Thomas Winkler

unread,
Dec 9, 2009, 1:52:41 PM12/9/09
to
Hallo Siegfried,

> Es gibt einen Heap-ᅵberlauf beim Exportieren. Erst dachte ich dass es an
> der Anzahl der Objekte liegt, tatsᅵchlich ist der Fehler aber nur von der
> Darstellungsgrᅵsse abhᅵngig, d.h. bei vielen Tabellen ist er durch
> Rᅵcknahme des Zoomfaktors vermeidbar (dass letzteres fᅵr den Export eine
> Rolle spielt sollte vielleicht in der Doku deutlich stehen).

Also eine bekannte Beschrᅵnkung gibt es nicht. Dabei handelt es sich
wohl um einen bisher unbekannten Bug. Die Lᅵsung wird also nicht in
einer Erweiterung der Doku liegen, sondern in einem Bugfix. :-)

Thomas

0 new messages