# mdb Verbindung ohne Registrierung der Datenquelle im OS



## tschero (14. Mrz 2011)

Guten Morgen,

Ich habe den Auftrag eine *.mdb Datenbank über ein Netzwerk zu befüllen.

Die Datei liegt auf einem Rechner im Netzwerk (nicht der Server) und bis zu 30 Personen müssen gleichzeitig Daten übertragen können.

Jetzt die Herausforderung:

Ich bekomme keine Verbindung zur DB wenn ich die Datenquelle nicht im OS registriere.
Dies ist aber auch vom Auftraggeber so nicht gewünscht.

Hier mein Code:


```
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("JDBC-ODBC-Datenbanktreiber erfolgreich geladen...");

cVerbindung = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + stDatenbankPfad + "" + "");
```

hier die Fehlermeldung:


```
JDBC-ODBC-Datenbanktreiber erfolgreich geladen...
14.03.2011 08:23:09 PdfPanzer.DatenSichern starten
SCHWERWIEGEND: null
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at PdfPanzer.DatenSichern.starten(DatenSichern.java:55)
        at PdfPanzer.DatenAufnahme.datenSpeichern(DatenAufnahme.java:167)
        at PdfPanzer.PdfErstellen.starten(PdfErstellen.java:157)
        at PdfPanzer.Main.main(Main.java:92)
```

Ich habe mich u.A. auch an diesem Link Datenbankverbindung (Java) - Byte-Welt Wiki orientiert. Klappt aber leider nicht.

Die ganze Geschichte funktioniert einwandfrei wenn ich die Datenquelle registriere ???:L, ohne leider nicht.

Über eine Hilfe würde ich mich freuen.

Gruß
tschero


----------



## maki (14. Mrz 2011)

Probier mal so eine URL:

```
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + filepath + ";READONLY=false}"
```
wobei filepath der absolute Pfad sein muss.



> Dies ist aber auch vom Auftraggeber so nicht gewünscht.


Ach, aber dass du die JDBC-ODBC Bridge nutzt welche nicht für den produktiven Einsatz bestimmt ist hat sich der Auftraggeber so gewünscht?
Die JDBC-ODBC Bridge war nie mehr als eine Demo...


----------



## tschero (14. Mrz 2011)

Hi,

ja das ist er.

D:/<Dateiname>.mdb


----------



## tschero (14. Mrz 2011)

Hi,

der Auftraggeber möchte dieses Programm auch in mehreren Netzwerken und Standorten benutzen und möchte sich den Aufwand der Registrierung der Datenquellen auf sämtlichen Rechnern sparen.
Explizit gewünscht hat er sich die Demo nicht.
Der aufgeführte Ansatz ist ein Versuch.

Kann ich ja auch nachvollziehen.

Gibt es irgendwo eine .jar Datei zum Einbinden in Netbeans welche das Problem behebt?
Ich stehe gerade voll auf dem Schlauch.

Gruß
tschero


----------



## Michael... (14. Mrz 2011)

Warum wird denn nicht eine echte Datenbank verwendet? Zumal da ja mehrere Leute gleichzeitig darauf zugreifen sollen.


----------



## tschero (14. Mrz 2011)

Hi,

der Auftraggeber wollte das eine *.mdb Datei verwendet wird.

Um die Geschichte mal zu konkretisieren:
Mehrere Nutzer bearbeiten ein Programm. Wenn diese das Programm beendet haben werden gewisse Daten in der *.mdb gespeichert. Hierzu muss der Nutzer kein Access verwenden sonder er arbeitet in der Umgebung SUMATRA Developer.

Die gesammelten Daten in der *.mdb werden durch ein weiteres (Java)Programm (JAR Datei) ausgewertet und ein PDF mit der Auswertung erstellt. Auch hier wird die Benutzeroberfläche von Access nicht zwingend benötigt.

Was wäre denn eine zweckmäßige Alternative?
Ich bin leider kein gelernter DB-Programmierer.

Gruß
tschero


----------



## XHelp (14. Mrz 2011)

Der Auftraggeber wollte vermutlich eine mdb-Datei, weil er das Wort bei google gefunden hat und es für toll fand 
Kannst ja eine MySQL Datenbank aufsetzen


----------



## tschero (14. Mrz 2011)

Es ist sehr wichtig dass keinerlei Installationsroutinen oder sonstige Arbeiten, welche Adminrechte erfordern ausgeführt werden müssen.

Ich weiß nicht genau wie das bei MySQL funktioniert.


----------



## XHelp (14. Mrz 2011)

überhaupt keine oder nur bei der Benutzung der Software? Eine Datenbank musst du natürlich einmalig auf einem Server aufsetzen.


----------



## tschero (14. Mrz 2011)

Das ist das Problem.
Der Server.
Der Auftraggeber will keinen weiteren Server laufen lassen.
Alles muss überall ohne Vorbereitung funktionieren.


----------



## XHelp (14. Mrz 2011)

Müssen die Daten auf jedem Rechner gleich sein? (Benutzer A auf Rechner X ändert einen Eintrag, muss das der Benutzer B auf Rechner Y sehen können?)


----------



## tschero (14. Mrz 2011)

Nein dass muss nicht sein.

Ist vergleichbar mit:

30 Schüler schreiben einen Test, sind fertig und die Daten werden gespeichert.
Lehrer wertet die Daten aus (Notendurchschnitt etc.) und erhält davon ein *.pdf.

Um es mal grob zu Umschreiben.

Gruß
tschero


----------



## XHelp (14. Mrz 2011)

Dennoch macht es mit einer zentraler Datenbank bzw. Server mehr Sinn. Frage mal den Auftraggeber *warum* es mdb sein soll. Ich bezweifle, dass er dafür plausible Argumente hat


----------



## maki (14. Mrz 2011)

Manchmal hat man nur noch die Wahl ob man es macht oder nicht (sondern jemand anderes), halte es immer für problematisch wenn der Kunde die Technologie festlegt (Kompetenzüberschreitung), solltest dich jedenfalls absichern, Access hat sowieso schon Probleme bei MDBs auf Netzlaufwerken und mehreren Nutzern, auch ganz ohne die Bridge.
Ansonsten gibt es noch kommerzielle JDBc Treiber für MDBs.


----------



## tschero (14. Mrz 2011)

Hi Leute,

ich verstehe Eure Argumente mit MySQL, jedoch *will *mein Auftraggeber ein Serverloses System.

Davon ab...es läuft. :toll:

Ich hatte die Java 64Bit Version am Start und arbeite jetzt mit Java 32Bit.

Funktioniert astrein, auch übers Netzwerk.
Jetzt kann sogar folgende Zeile entfallen:

```
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
```


Nochmal herzlichen Dank an alle die hier geholfen haben.

Gruß
tschero


----------

