# Access : Operation muss eine aktualisierbare Abfrage verwend



## peppermint (3. Mrz 2005)

Hab folgendes Problem mit Access als Datenbank.

Wenn ich versuch mit insert was in die DB zu schreiben bekomm ich ne Exception.

Das auslesen aus der DB funktioniert tadellos... 


```
private final static String driver = "sun.jdbc.odbc.JdbcOdbcDriver";


    private final static String dataBase = "jdbc:odbc:werkszeugnisse";






   public void setDataSet(DataSet dataSet) {
        try {
            Class.forName(driver);
            String database = dataBase;
            
            con = DriverManager.getConnection(database);
                       
            Statement stmt = con.createStatement();
            
            String insert = "INSERT INTO Werkszeugnisse(Charge) VALUES('test');";

            stmt.executeUpdate(insert);
            
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
```

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Operation muss eine aktualisierbare Abfrage verwenden.

Bei Google hab ich schon gesucht...
Allerdings kann ich die häufigste Fehlerquelle für diese Exception, nämlich den fehlenden Schreibzugriff, ausschließen...

Jemand ne Idee, woran es noch liegen könnte...


----------



## bronks (3. Mrz 2005)

Ist [Werkszeugnisse] eine Datentabelle oder ein nichaktualisierbarer View (Abfrage)?


----------



## peppermint (3. Mrz 2005)

Is ne Datentabelle...


----------



## bronks (3. Mrz 2005)

Im ODBC-Setup kann man rechts unten die Optionen aufklappen. Überprüf mal ob der Treiber nicht schreibgeschützt fährt.


----------



## DP (3. Mrz 2005)

mit executeupdate kann man keinen insert loswerden...


----------



## peppermint (3. Mrz 2005)

Hab nachgeschaut...

Läuft nicht schreibgeschützt.

War leider nicht der Grund...  :? 

Aber trotzdem schon mal Danke für deine Hilfe!

@DP
Wie dann...?
Habs auch schon nur mit execute probiert... ging auch nicht??


----------



## Bleiglanz (3. Mrz 2005)

"INSERT INTO Werkszeugnisse(Charge) VALUES('test');"

Strinchpunkt am Ende weg

Hat die Tabelle wirklich nur eine EINZIGE Spalte Charge, bzw. erlauben alle anderen Spalten die NULL (oder haben einen defaultwert)?


----------



## peppermint (3. Mrz 2005)

Ohne Strichpunkt hatte ich es auch schon probiert, hab dann aber hier im Forum nen Post gesehen, bei dem beim Insert n Strichpunkt am Ende war, drum hab ich ihn dran... Ändert sich aber nix, wenn ich ihn weg mach, gleiche Exception...

Die Tabelle hat noch einige Spalten(viel zu viele eigentlich, aber da es die Datenbank schon gibt und auch mit ca. 20000 Datensätzen gefüllt ist, kann ich nix am DB-Design ändern) aber es sind überall null-Werte erlaubt.

Habs auch grad getestet, wenn ich jeder Spalte nen Wert zuweise, bringt er immer noch die gleiche Exception ??

Woran liegt dass  ???:L


----------



## DP (3. Mrz 2005)

funktioniert denn ein select?!


----------



## bronks (3. Mrz 2005)

Der Code läuft per ODBC auf Access2002 und hat nicht nur durch Zufall eine Ähnlichkeit mit Peppermint's Code:


```
package odbcinsert;

import java.sql.*;

public class OdbcInsert 
{

  private final static String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 

  private final static String dataBase = "jdbc:odbc:Auftraggeber"; 

  public OdbcInsert()
  {
          try { 
            Class.forName(driver); 
            String database = dataBase; 
            
            Connection con = DriverManager.getConnection(database); 
            Statement stmt = con.createStatement(); 
            ResultSet rs = stmt.executeQuery("select * from auftraggeber;");
            
            while(rs.next())
            {
              System.out.println(rs.getString("Auftraggeber"));
            }
            stmt.executeUpdate("insert into Auftraggeber(Auftraggeber) values('asdfasdf');"); 

            stmt.close();
            con.close(); 

        } catch (Exception e) { 
            e.printStackTrace(); 
        } 

  }


  public static void main(String[] args)
  {
    OdbcInsert odbcInsert = new OdbcInsert();
  }
}
```


----------



## peppermint (4. Mrz 2005)

@DP

Select funktioniert ohne Probleme... drum versteh ichs ja nicht ??


----------

