# mdb-file erstellen?



## Verjigorm (22. Aug 2008)

Hallo,

wie erstelle ich denn mit java eine mdb-datei?

Erster Ansatz war, ein neues File-Objekt anzulegen und mit createNewFile() die Datei zu erzeugen.

Aber Pustekuchen, die Datei wird zwar erzeugt, aber nicht als korrekte mdb-datei erkannt.
Es kommt dann die Fehlermeldung:

Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Datenbank '(unbekannt)' konnte nicht geöffnet werden. Entweder wird die Datenbank nicht von Ihrer Anwendung erkannt, oder die Datei ist beschädigt.

Der Pfad zur Datei ist korrekt, wenn ich die Datei "von Hand" erstelle, funktioniert es.

mfg Verjigorm


----------



## AlArenal (22. Aug 2008)

Verjigorm hat gesagt.:
			
		

> Hallo,
> 
> wie erstelle ich denn mit java eine mdb-datei?



Wahrscheinlich gar nicht.

http://forums.sun.com/thread.jspa?messageID=10321368


----------



## Verjigorm (22. Aug 2008)

Alter Schwede in letzter Zeit kämpf ich mehr mit Dingen wie "geht net" als mit der eigentlichen Programmierung


----------



## maki (22. Aug 2008)

Wieso lässt du den Access Müll nicht bleiben und konzentrierst dich auf richtige DBs? 



> Alter Schwede in letzter Zeit kämpf ich mehr mit Dingen wie "geht net" als mit der eigentlichen Programmierung


Wenn das in der Evaluierungsphase passiert ist das normal, wenn das im Alltag passiert trifft irgendwer seltsame Entscheidungen.


----------



## Verjigorm (22. Aug 2008)

maki hat gesagt.:
			
		

> Wieso lässt du den Access Müll nicht bleiben und konzentrierst dich auf richtige DBs?
> 
> 
> 
> ...



Weil der Auftraggeber nunmal die Rahmenbedingungen festgelegt hat:

Windows Vista :roll:
Java 1.5 :roll:
Migration von SuperbaseDatenbank -> Access 2003 :roll:


----------



## maki (22. Aug 2008)

> Weil der Auftraggeber nunmal die Rahmenbedingungen festgelegt hat:


Das mag ja sein das der Kunde eine "lustige" Idee hat, aber wenn der Auftraggeber das selbst könnte, bräuchte er dich doch nicht 

Musst ihm schon sagen was geht und was nicht geht bzw. was besser ist, musst ja auch ein Konzeptoder ähnliches  erstellt haben.

Wie in deinem anderen thread bereits gesagt würde das doch nicht von Java aus machen, hat ja genaugenommen nicht mal was damit zu tun, ist 'ne reine DB Kiste, zumindest die Konvertierung.

Deswegen verstehe nicht warum du mit Java eine MDB Datei anlegen willst...


----------



## Verjigorm (22. Aug 2008)

Naja das sind halt Rahmenbedingungen unter denen der Vertrag angenommen wurde (vom Chef)

Unsere Firma "pflegt" die Superbase Daten, diese sollen nun in Access migriert werden.

Während der Migrierung sollen einige Plausibilitätstest durchgeführt werden. Am Ende soll eine "fehlerfreie" Access-DB rauskommen, aus der regelmässig irgendwelche Reports generiert werden.

Der Auftraggeber hat sich das halt auch nur ausgesucht, weil das nunmal sein laufendes System ist.

Soweit ich mitbekommen habe, werden die Access-Tabellen unter anderem in einem SAP-System benutzt und weiterverarbeitet ....

Und das Ganze muss/soll halt in Java realisiert werden.
Ansonsten müsste ich mir über nacht mal schnell ne andere Programmiersprache zulegen


----------



## maki (22. Aug 2008)

> Und das Ganze muss/soll halt in Java realisiert werden.
> Ansonsten müsste ich mir über nacht mal schnell ne andere Programmiersprache zulegen icon_wink.gif


Du scheinst nicht zu verstehen: SQL ist was du brauchst, zumindest um die DB Tabellenstruktur von Superbase nach Access zu migrieren.

Ob und wie du deine Daten dann transferierst & validierst ist dann wieder dir überlassen.
Obwohl ich hier auch ganz stark zu SQL tendiere, wenn die Fremdschlüssel bzw. Contrainst richtig definiert sind, reicht das doch.
Man könnte auch sagen dass SQL eine DSL für Relationale DBs ist... :roll: 

Aber eine Access DB mit Java anlegen, sorry, das ist doch Quatsch.


----------



## Verjigorm (22. Aug 2008)

Und wer soll dann die Access Datei erstellen, wenn nicht Java??


----------



## maki (22. Aug 2008)

Access selbst zB..

Du musst doch nur die Tabellenstrukturen erzeugen (meine Meinung wie mann das ambesten macht kennst du ja bereits) und Tabellen mit Daten befüllen.


----------



## Verjigorm (22. Aug 2008)

Ähm das soll ein Konvertierungstool werden.

Superbase rein, Access raus.
Wüsste nicht, wie ich da Access mit einbauen sollte...


----------



## maki (22. Aug 2008)

> Ähm das soll ein Konvertierungstool werden.
> 
> Superbase rein, Access raus.
> Wüsste nicht, wie ich da Access mit einbauen sollte...


Dir ist aber klar das das eben NICHT geht, oder?

Die DB  *muss* bereits vorher erzeugt worden sein, erst dann kannst du sie als ODBC Datenquelle von Java aus mit der JDBC-ODBC Brücke nutzen.

Wenn du per Java SQL Befehle absetzen kannst die die Tabellenstruktur erzeugen und die Daten befüllen, reicht es doch, wenn du vorher mit Access die leere DB erzeugst und diese dann als Datenquelle einträgst.

(Abgesehen davon ist es genau das was ich meinte mit "wenn das im Alltag passiert trifft irgendwer seltsame Entscheidungen")


----------



## Verjigorm (22. Aug 2008)

Es ist halt nicht eine leere DB, die erzeugt werden muss, sondern tausende und das halt dynamisch.

Aber mit einer dummy-mdb, die immer kopiert wird, geht es.
Dann kann ich die DB-Struktur, die ich vorher aus der superbase-tabelle ausgelesen und nachgebaut habe in die mdb stopfen und dann die Daten einfügen.

das Ganze halt dann in ner Schleife und warten bis der Rechner schlappmacht, es sind nämlich mehrere Terrabyte an Daten, die kopiert werden müssen ...
Über die 2GB-Beschränkung von Access denke ich erstmal garnicht nach


----------



## ARadauer (22. Aug 2008)

> Erster Ansatz war, ein neues File-Objekt anzulegen und mit createNewFile() die Datei zu erzeugen.
> 
> Aber Pustekuchen, die Datei wird zwar erzeugt, aber nicht als korrekte mdb-datei erkannt.
> Es kommt dann die Fehlermeldung:


das meinst du nicht ernst oder?



> Weil der Auftraggeber nunmal die Rahmenbedingungen festgelegt hat:
> 
> Windows Vista
> Java 1.5
> Migration von SuperbaseDatenbank -> Access 2003


manchmal muss man dem auftraggeber auch erklären können, dass das nix is...

ich würd sowas mit c# machen oder einfach eine andere db verwenden.....


----------



## Natorion (22. Aug 2008)

Entweder mit C# oder probier mal folgendes (keine Ahnung ob das geht):

-mach eine leer Access-DB mit Access
-kopier diese DB (zB meineDBTemp.mdb)
-Du hast jetzt zwei DBs
-registriere die Temp-DB als ODBC-Zeigs.
-Ruckelzuckel per ODBC/SQL/Java über die Temp-DB drüber
-Kopiere die Temp-DB dahin, wo du sie haben willst
-Überschreib die Temp-DB mit der leeren DB
-Goto 3 *G*

Wie gesagt, ka ob das funktioniert ... vielleicht lässt er dich die Datei garnit überschreiben.


----------



## Verjigorm (22. Aug 2008)

@ARadauer: was nicht ernst meinen?

@Natorion: ähm das habe ich doch eigentlich schon so geschrieben (in mehrere Postings verteilt  )


----------



## Natorion (22. Aug 2008)

Oh, der Post, was meinst mit "bis der rechner schlapp macht"? zerstörst (oder besser dereferenzierst) du nicht alle objekte die du erstellst und dein speicher wird voller und voller oder dauert das alles nur ewig?


----------



## Tommy65 (31. Aug 2008)

Hallo,

>es sind nämlich mehrere Terrabyte an Daten

????

Dafür ist Access ja besonders gut geeignet.  :cry: 

>sondern tausende und das halt dynamisch. 

Das ist in sich dann wieder logisch

Meines erachtens ist das großer Humbug... der Kunde ist falsch beraten worden, weil es eigentlich keinen vernünftigen Grund für so eine Vorgehensweise geben kann.

Unabhängig davon finde ich Dein Problem nicht sooo schwierig, da Du nur einmal eine "dummy" mdb braucht, die dann jeweils als Template dient und kopiert wird.

Bei dieser Vorgehensweise ist dann auch der Einsatz von Java möglich.

Irgendwo im Netz gibt es tatsächlich eine reine Java Lösung für den Zugriff auf Access ohne JDBC-ODBC-Bridge, aber auch die kann, wenn ich mich recht entsinne, keine mdbs erstellen.

Ich würde mir an Deiner Stelle trotzdem ein Workaround überlegen, das hört sich alles furchtbar umständlich an...


----------



## Bj (19. Sep 2008)

Schau mal hier jackcess.sourceforge.net/

Grüße

Bj


----------



## Landei (19. Sep 2008)

Kleine Warnung noch: Mit der JdbcOdbc Bridge bekommst du keinen Unicode übertragen.
Ich habe das auf die harte Tour gelernt, als ich mal ein Programm schreiben wollte, das XML-Daten mit japanischer Schrift nach Access schaufeln sollte. Ging nicht. Und für alle Treiber, die das konnten, wurde (zumindest damals) eine pekuniäre Kompensation verlangt.


----------



## Guest (19. Sep 2008)

Microsoft stellt doch alles auf XML um.

Gilt das auch für die Abszess-Dateien?


----------

