# [Microsoft][ODBC Microsoft Access Driver]COUNT field incorre



## niel (2. Jan 2006)

Ich benutze eine mdb datenbank fur mein program aber wenn ich etwas eintragen will bekomme ich dies Fehlermeldung: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorre


dies ist das code:

private void writeTable(){
            /* First clear the table */
            emptyTable();
            Statement insertRow;// = con.prepareStatement(
            String baseString = "INSERT INTO UserTable " +
                                       "VALUES (?, ?)";

            String insertString;

            int numRows = tabulka.getRowCount();
            javax.swing.table.TableModel model = tabulka.getModel();
            Integer sup, nm;


            if(DEBUG) System.out.println("\nDoing Write...");

            try {
                /* connect to the database */
                String filename = "c:/java/mdbTEST.mdb";
                String database = "jdbcdbcriver={Microsoft Access Driver (*.mdb)};DBQ=";
                database+= filename.trim() + ";DriverID=22;READONLY=true}";
                Connection con = DriverManager.getConnection(database ,"","");
                insertRow = con.prepareStatement(baseString);
                    for (int r=0; r < numRows; r++) {
                            if (model.getValueAt(r, 0) != null){



                                    insertString = baseString + model.getValueAt(r, 0)+"',";
                                    insertString = insertString + model.getValueAt(r, 1)+",";


                                    if(DEBUG) System.out.println(insertString);
                                    insertRow = con.createStatement();
                                    insertRow.executeUpdate(insertString);
                                    System.out.println("Writing Row " + r);

                insertRow.close();
                        }
                    }
                con.close();
            } catch(SQLException ex) {
                System.err.println("SQLException4: " + ex.getMessage());
            }
            clearTable();
        }


----------



## Bleiglanz (2. Jan 2006)

hat usertalbe wirklich genau zwei Spalten?


----------



## André Uhres (2. Jan 2006)

Hier ist ein Codeschnipsel der bei mir funktioniert. Vielleicht hilft er dir irgendwie weiter.

```
...
        try{ 
            DriverManager.registerDriver( new sun.jdbc.odbc.JdbcOdbcDriver() ); 
            connection = DriverManager.getConnection(DATABASE_URL); 
            System.out.println("Verbindung OK"); 
        }catch(SQLException ex){ 
            System.out.println("Fehler: Verbindung nicht erstellt"); 
            System.out.println( ex.getMessage() ); 
        } 
        try{ 
            doQuery(); 
        }catch(SQLException ex){ 
            String msg = ex.getMessage(); 
            System.out.println( msg ); 
        } 
...
    private void doQuery() throws SQLException{ 
        try { 
            if(connection!=null){ 
                statement = connection.createStatement(); 
                resultset = statement.executeQuery(query); 
                dispResultSet(resultset); 
            } 
        }finally{ 
            if(resultset!=null)resultset.close(); 
            if(statement!=null)statement.close(); 
            if(connection!=null)connection.close(); 
        } 
    } 
    private void dispResultSet(final ResultSet resultset) throws SQLException{ 
        int i; 
        ResultSetMetaData rsmd = resultset.getMetaData(); 
        int numCols = rsmd.getColumnCount(); 
        // Spalten-Überschriften anzeigen 
        for (i=1; i<=numCols ; i++) { 
            tablecolumn = displayTable.getColumnModel().getColumn(i-1); 
            tablecolumn.setHeaderValue( rsmd.getColumnLabel(i).toString() ); 
        } 
        // Daten anzeigen, bis zum Ende vom "result set" 
        boolean more = resultset.next(); 
        while ( more ) { 
            // Jede Spalte durchgehen und Spalten-Daten anzeigen 
            Object[] rowData = new Object[numCols]; 
            for (i=1; i<=numCols; i++) { 
                rowData[i-1] = resultset.getString(i); 
            } 
            displayTableModel.addRow(rowData); 
            // Nächste Zeile vom "result set" holen
            more = resultset.next(); 
        } 
    } 
    private String query; 
    private JTable displayTable; 
    private DefaultTableModel displayTableModel ; 
    private TableColumn tablecolumn ; 
    private Connection connection; 
    private Statement statement; 
    private ResultSet resultset; 
    private final String DATABASE_NAME = "customer"; 
                      //customer ist in Windows als DATENQUELLE angelegt!!!
    private final String DATABASE_URL = "jdbc:odbc:" + DATABASE_NAME;
```


----------



## niel (2. Jan 2006)

ja ich habe nur zwei spalten, ich kann lesen aber ich kann nich editieren


----------



## niel (2. Jan 2006)

Andre_Uhres: dieses kod ist aber nur fur lesen. und ich brauche auch editieren ud loschen


----------



## André Uhres (2. Jan 2006)

Das einzige was dabei ändert ist ja höchstens executeQuery-->executeUpdate.
Obschon, bei mir kann ich insert, update und delete auch mit executeQuery machen.


----------



## bronks (3. Jan 2006)

niel hat gesagt.:
			
		

> ... COUNT field incorre ...


Kann es sein, daß Du versuchst ein Feld mit "Autowert" upzudaten?


----------



## niel (3. Jan 2006)

> Kann es sein, daß Du versuchst ein Feld mit "Autowert" upzudaten?



Was meinst du mit autowert?[/quote]


----------



## bronks (3. Jan 2006)

niel hat gesagt.:
			
		

> ... Was meinst du mit autowert? ...


Schau mal in Access eine Tabelle in der Entwurfsansicht an. Bei den Datentypen findest Du auch den Autowert. Das ist ein Zähler, den man als RowId verwenden kann. Ließ Dir auch in der Accesshilfe das Kapitel zum Autowert durch.

Diesen Autowert darf und kann man nicht updaten. Ist das evtl. bei Dir der Fall?


----------



## niel (3. Jan 2006)

nein das ist auch nicht der problem


----------



## Bleiglanz (3. Jan 2006)

"READONLY=true" und "INSERT"

wie geht denn das zusammen


----------



## bronks (3. Jan 2006)

Bleiglanz hat gesagt.:
			
		

> "READONLY=true" und "INSERT"
> 
> wie geht denn das zusammen


Du hast echt Augen, wie ein Adler ...


----------



## niel (3. Jan 2006)

Bleiglanz hat gesagt.:
			
		

> "READONLY=true" und "INSERT"
> 
> wie geht denn das zusammen



ok das READONLY=true habe ich ausgeloscht aber es geht noch immer nich


----------



## Bleiglanz (3. Jan 2006)

jetzt habsch doch mal angeschaut

```
insertString = baseString + model.getValueAt(r, 0)+"',";
insertString = insertString + model.getValueAt(r, 1)+",";
```
ist doch völlig irre und der Code überschreibt noch dazu das erste Statement; das ist ein preparedStatement, die Platzhalter  (?,?) müssen mit setString(1,...) und setString(2,...) gesetzt werden.


----------

