# Java/Access - Fehler bei der Parameterübergbe



## HelloWolrd (26. Sep 2005)

Hallo Javafreunde!

Habe ein Problem mit meinem Java-Programm und meiner Access-Datenbank. Habe auch schon gegooglet, den Fehler gibt es zwar, aber mein Problem ist immer noch da.

Greife auf meine Access-Tabelle zu. Die besteht auf fünf Spalten:

- IDWert (Autoincrement)
- Objektart (Text)
- Farbe (Text)
- XWert (Zahl)
- YWert (Zahl).

Auslesen der Werte mit select klappt (auf meinem Canvas werden die Punkte angezeigt). 

Probleme gibt es bei update, delete, ....

Hier bekomme ich immer diese Fehlermeldung: "Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben".

Habe schon im Quelltext und in meiner Datenbank nach vielleicht falsch geschriebenen Namen geschaut. Fehlanzeige! Auch die Reihenfolge oder die Anzahl stimmen.

Komisch dabei ist, und hier sitzt wohl der Fehler:
Wenn ich im querystring ganze normale Zahlen für die Spalten in der Tabelle angebe, übernimmt das Programm diese und trägt sie in die Tabelle ein. Wenn ich für die Zahlen aber Strings verwende (uns das muss ich, da sich die Werte in den Strings ja immer ändern), bekomme ich diese Fehlermeldung. 

Beispiel: delete...Objektart, Farbe, XWert, YWert...('Punkt', 'Rot', XWert, YWert)
Würde ich jetzt für XWert und YWert zwei Werte setzen ('Punkt', 'Rot', '100', '200') klappts wieder.
Irgendwie komisch! XWert und YWert sind bei mir im Programm integer.
IDWert wird aussen vorgelassen, der Wert erhöht sich ja automatisch.

Vielleicht kann mir ja jemand helfen. Dank im vorraus.

Gruss HelloWorld


----------



## Bleiglanz (26. Sep 2005)

Zahlen soll man nicht in einfachen Hochkommas übergeben, poste aber trotzdem mal etwas mehr Code

was ist denn XWert bzw. YWert und wie baust du die in deinen SQL-String ein?

Alternativ (und besser): verwende ein PreparedStatement und mach setInt


----------



## HelloWorld (28. Sep 2005)

Hier mal eine Funktion zum speichern von Punkten unter Access.

public static void SQLPunkt (int WertX, int WertY) (

try (
   //JdbcOdbcDriver initialisieren
   Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
   )

catch (ClassNotFoundException ee) (
   System.out.println("Fehler bei ODBC-JDBC-Bridge" + e);
   return;
   )

// Variablen initialisieren.
   Connection  con;
   Statement stmt;
   ResultSet rSet;

try (
   // JdbcOdbcDriver auf Datenbank festlegen.
   String url = "jdbcdbc:GeoObjekte";
   con = DriverManager.getConnection(url, "User", "User");
   stmt = con.createStatement();

   // Abspeichern der Punkte unter Access.
   String insertString = "INSERT INTO Punkte (Objektart, Farbe, XKoord, YKoord)" +
   "VALUES ('Punkt', 'Rot', WertX, WertY)";
   stmt.executeUpdate(insertString);

   // Schließen der Abfrage.
   stmt.close();
   con.close();
)

catch (SQLException f) (
   System.out.println("Fehler bei Tabellenabfrage" + f);
   return;
)

)

Komisch ist, würde ich die Variablen (WertX, WertY) im String durch Werte ersetzen (z.B. '100', '200'), würden die Daten in Access richtig eingetragen werden. Als ob der String keine Variablen verarbeiten könnte.

Vielleicht kann man den insertString ja anders aufbauen.

Gruss HelloWorld


----------



## Bleiglanz (28. Sep 2005)

```
String insertString = "INSERT INTO Punkte (Objektart, Farbe, XKoord, YKoord)" +
"VALUES ('Punkt', 'Rot', WertX, WertY)";
```
das kann nicht gehen, weil der String literal von ACCESS nicht verstanden wird

```
String insertString = "INSERT INTO Punkte (Objektart, Farbe, XKoord, YKoord)" +
"VALUES ('Punkt', 'Rot',"+ WertX+", "+WertY+")";
```
verwende trotzdem lieber ein PreparedStatement


----------



## HelloWorld (29. Sep 2005)

Moinsen JavaFreunde!

Mit dem preparedStatement und dem setInt() hat alle geklappt.

Danke für den Hinweis.

Gruss HelloWorld


----------

