URL: https://www.overclockers.at/coding-stuff/help_zugriff_auf_ms_access_ueber_jdbc-odbc_192009/page_1 - zur Vollversion wechseln!
moin moin.
wie einige von euch vielleicht gemerkt haben, habe ich eine datenbank im sql server 2005 erstellt und eine oberfläche zur bedienung dafür in java geschrieben. so. die alten daten sind aber in einem pöhsen passwortgeschützten mdb-file gefangen und mein plan war, ein programm zu schreiben, welches sich dort hineinschleicht und die daten befreit, in dem es ein insert-skript für die neue (sql server 05) datenbank schreibt.
ich bekomm aber den zugriff von java aufs mdb nicht hin
bis jetzt hab ich es mit jackcess und noch jackcess-jdbc probiert, aber aufgegeben, weil ich bei beiden fehlermeldungen bekam, die ich nicht verstanden habe. außerdem hab ich kein tutorial im internet gefunden, was mir sowas immer besonders schwer macht 
zu guter letzt hab ich mich doch für die von sun in jdk 6 zur verfügung gestellte jdbc-odbc-bridge entschieden. ich hab viele code-snippets gesehen, aber es FUNKTIONIERT EINFACH NET!
mein code:
Code: PHPpublic static final String DB_DRIVER="sun.jdbc.odbc.JdbcOdbcDriver"; public static final String DB_URL="jdbc: odbc: Driver={Microsoft Access Driver (*.mdb)};DBQ="; public static final String DB_USER = "Administrator"; public static final String DB_PW=" pw "; public static final String DB_URLDNS="jdbc: odbc: DokuAlt"; File mdb = new File("D:"+File.separator+"Leistungsdokumentation"+File.separator+"Dokumentation.mdb"); if (mdb.exists() && mdb.canRead()) { String url = DB_URL+mdb.getAbsolutePath(); System.out.println("URL: "+url); Class.forName(DB_DRIVER); Connection knexon = DriverManager.getConnection(url, DB_USER, DB_PW); }
Code: PHPcompile: run: URL: jdbc: odbc: Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Leistungsdokumentation\\Dokumentation.mdb; java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Kein zulässiges Kennwort. at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Kein zulässiges Kennwort. 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:185) at transferfrommdb.Main.main(Main.java:31) BUILD SUCCESSFUL (total time: 0 seconds)
passwort aus der .mdb entfernen? 
ZitatFor an MS Access database password, use:
Connection con=DriverManager.getConnection("jdbcdbc
RIVER={Microsoft Access Driver (*.mdb)};DBQ=D://Jan1//TS-100061-2006-JAN-1.mdb;PWD=04027240411;");
ja, ersteres hab ich mir gestern auch gedacht, hab's aber anscheinend vergessen, weil access 2k datenbanken im access 2k7 nicht ohne eine änderung im vb editor bei den verweisen funktoionieren. hat mich auch viel nerven gekostet 
@pw in url: ich schau mal kurz, wart...
//...nö, haut auch nicht hin. dafür geht's, wenn man das passwort rausnimmt.
also bis auf weiteres solved, danke 
del
hui, ich bin's wieder!
folgendes: weil ich jetzt grad dabei bin, die daten, die ich mir mühsam von access in den sql server geholt habe, wieder (gleiche struktur wie in ms sql) in access zu schreiben (hört sich schräg an, aber bitte nicht fragen
), hab ich wieder ein problem.
im sql server gibts dieses tolle SET IDENTITY_INSERT <Table> ON (kann den primary key beim insert angeben und das automatische inkrementieren desselben funkt nachher trotzdem) feature, das gleiche hätte ich gerne in access, hab aber im google bis jetzt nichts gefunden. zwar hab ich was von einer "append query" gelesen, aber entweder nicht verstanden oder sie ist wirklich nicht das, was ich suche.
help plz! tia 
//bitte _ohne_ die access gui bemühen zu müssen...
///ein workaround wäre natürlich, in der access-table das PK-feld erst auf NOT NULL zu setzen und später mit ALTER TABLE als PK zu definieren. dann hätte ich die richtigen IDs drin, aber haut das autoinkrementieren danach hin, wenn ich einen neuen datensatz einfüge?
////genau! und was da das problem war: dann hab ich nur einen integer als PK, aber keinen "counter" (wies im access so schön heißt) deswegen _kann_ ich ja gar keine automatischen werte kriegen... 
/////wuha, fast gelöst. das man mit Alter Table [Tabellenname] Alter Column [Feldname] Counter(n,m) auch den startwert und so setzen kann, steht auf den meisten access-hilfeseiten nämlich nicht
jetzt muss ich nur noch eine lösung dafür finden, dass die tabelle gesperrt werden kann :/
//////lösung für gesperrte tabelle gefunden (connection zu, connection auf), aber neues problem. damit die zeile oben hinhaut, muss das feld schon vorher ein counter gewesen sein... 
ok, ich hab herausgefunden, wie es geht. trial & error ftw! hier die anleitung mit ein bissi pseudocode.
tabelle A: alte tabelle
tabelle B: tabelle, in die die daten transferiert werden sollen
1. in tabelle B den zukünftigen primary key einfach als counter definieren.
Code:CREATE TABLE B (ID COUNTER, <other fields>);
Code:int max = SELECT MAX(ID) FROM B;
Code:ALTER TABLE B ALTER COLUMN ID COUNTER(max+1, 1);
Code:ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY (ID);
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026