# Access Update Statement Fehler update -> unmöglich?



## MrTobi (26. Okt 2011)

Hallo,
so langsam verzweifle ich. Ich will ein Update auf eine Access Datenbank ausführen, so langsam glaube ich, das etwas irgendwo zwischen meinem Programm und der Datenbank nicht stimmt. Weil wenn ich das Statement so 1:1 in Access ausführe läuft das. Ich bekomm immer IMMMER den Parameterfehler. Die Zeile über dem Fehler ist die welche mir das System.out.println() ausgibt.
Wie gesagt wenn ich das in Access ausführe -> wunderbar macht er ohne zu meckern. Die Select's funktionieren auch ohne Probleme. Weiß irgendjemand woran das liegt? 
Ich glaub langsam das irgendwas mit JDBC:ODBC nicht stimmt und er was falsch umwandelt  .

Und kommt mir jetzt nicht mit Prepared Statements da bekomm ich gleich 3 Parameterfehler.  

Ich habe auch schon versucht die Tabellenfelder mit "[]" zu umklammern -> Selber Fehler. Printout:
update tbl_Laser SET [isAlive] = 'true' WHERE [Programmname] ='6AV35031DB10';


update tbl_Laser SET isAlive = 'true' WHERE Programmname ='6AV35031DB10';
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(Unknown Source)
	at DataBaseLaser.updateisAlive(DataBaseLaser.java:105)
	at Main.main(Main.java:35)

Folgender simpler Code:


```
public void updateisAlive(DataHolder currentHolder) throws SQLException{
		Statement st = myConn.createStatement(); 
		String updateSql = "update tbl_Laser " +
				"SET isAlive = 'true' " +
				"WHERE Programmname ='"+currentHolder.getsMatnr()+"';";

		System.out.println(updateSql);
		int updateSuccess = st.executeUpdate(updateSql);
	}
```


Weitere Code fals ihr den braucht:


```
private DataBaseLaser() {

		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}

		String sUsr = "";
		String sPw = "";
		String sDbUrl = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
				+ idDatabasepath + ";READONLY=false}";

		try {
			myConn = DriverManager.getConnection(sDbUrl, sUsr, sPw);
			connAbfragen=false;
			// System.out.println("Verbindung hergestellt: " + myConn);
		} catch (SQLException e) {
			e.printStackTrace();
			connAbfragen = true;
		}

	}
```


----------



## SlaterB (26. Okt 2011)

die Fehlermeldung kann man ganz gut suchen
Was bedeutet bei Access der Fehler es wurden zu wenig Parameter bergeben?
Active Server Pages - FAQ

könnte 'True' statt 'true' dein Fehler sein? auch wenn dafür die Fehlermeldung arg nichtssagend wäre 

versuche es evtl. andersrum: teste, nur mit 'select * from tbl_Laser' zu lesen,
schau dir an wie die Spaltennamen und die Werte genau aussehen


----------



## MrTobi (27. Okt 2011)

Also das mit dem true bzw True ist in dem Fall irelevant. 
Das Feld "isAlive" ist ein Textfeld. Daher schreibe ich nur den String 'true' rein , logischerweise könnte ich ja auch 'blabla' reinschreiben geht aber auch nicht 
Ich hab auch in der Datenbank und im Code das Feld umbenannt -> Selber Fehler.
Wie gesagt die komplexesten Select's mit übertrieben ausgedrückt 30 Joins funktionieren. Aber ich habe es noch nie geschafft auf eine Access Datenbank per JDBC:ODBC ein Update auszuführen ist das überhaupt möglich?

Ich weiß echt nimmer weiter das kann doch nicht wahr sein das man kein Update ausführen kann?! :bahnhof:

Es handelt sich um Access 2003 falls das irgendwie relevant ist.

Grüße
MrTobi


----------



## SlaterB (27. Okt 2011)

gehts ohne Semikolon? 
ne ich weiß eigentlich nichts mehr,
wenn keine Tutorials aus dem Internet laufen oder gar nicht erst zu finden sind..


----------

