MS Access mit Java Problem mit Update Statment

Rin

Mitglied
Hallo alle zusammen,

ich bin seit heute hier regestriert weil ich schon viele hilfreiche sachen hier gelesen habe und man merkt das hier einem geholfen wird

Ich hab folgendes Problem in folgendem Code:

Java:
 String einmupStmt1 = "UPDATE Einmelder2 " +
				   "SET Einmelder2.Umfragelink = " + Umfragelink + " " +
				   "WHERE Umfragelink = Null AND EinmelderID IN (" +                                   Authentificator.getIdSb() +
				   ")";
				 PreparedStatement einmupPrepSt1 = con.prepareStatement(einmupStmt1);
				 boolean einmupresult1 = einmupPrepSt1.execute();

das Authentificator.getIdSb ist ein stringbuffer wo ausgewählte 20% einer tabelle upgedatet werden sollen so die Tabelle schaut so aus
  • Einmelder ID (Autowert)
  • Einmelder (String)
  • EinmelderEmail (String)
  • LetzeUmfrage (Date) (Timestemp)
  • UmfrageID (Zahl) (Verweis auf die jeweilige Umfrage)
  • Umfragelink (String)
  • Gesperrt (Boolean) (Erklärt sich von selbst)

Problem ist das er mir jedes mal diesen fehler ausgibt:
[Microsoft][ODBC-Treiber für Microsoft Access] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
:bahnhof: ???:L

ich hoffe es kann mir wer helfen
Vielen Dank

Lg
 
Mach doch mal nach Zeile 4 ein
Code:
System.out.println(einmupStmt1);
und führe dann diese Ausgabe direkt auf der Datenbank aus. So siehste dann schonmal recht schnell, ob du das Statement richtig zusammengesetzt hast. Ausserdem verstehe ich nicht, warum du PreparedStatement verwendest und dein Statement trotzdem selber zusammenbaust. PreparedStatement nimmt dir eigentlich diese Arbeit ab und macht die Statements dadruch transparenter und fehlerunanfälliger.

btw: Variablen sind lowerCamelCase.
 
also wenn ich vorher System.out.println(einmupStmt1); zeigt er mir ein korrektes Statment

UPDATE Einmelder2 SET Einmelder2.Umfragelink = asdasdasd WHERE Umfragelink = Null AND EinmelderID IN (7269, 7270, 7271, 7272, 7273, 7274, 7275, 7276, 7277)

ich arbeit noch dazu mit swing und den link geb ich manuell ein

und wusst ich nicht das preparedstatment mir diese arbeit abnimmt dann sollte statment ausreichen wenn ich es eh zusammen bastel

was mich einfach so stutzig mach ist das die spalte vorhanden ist die where bedingung stimmt eigentlich auch hm...

sitzt jetzt schon seit gestern an diesem problem
 
Wo ist das ein korrektes Statement? Da fehlt doch hinten das ; evtl. Where noch klammern. Access ist da manchmal eigenen

UPDATE Einmelder2 SET Einmelder2.Umfragelink = asdasdasd WHERE (Umfragelink = Null AND EinmelderID IN (7269, 7270, 7271, 7272, 7273, 7274, 7275, 7276, 7277));
 
Einmelder2.Umfragelink = "asdasdasd" ist ja ein Text den du da überschreiben willst. Liegt also allein an deiner SQL Formulierung. zur Not Access auf u Aktualisierungsabfrage erstmal da formulieren.

mit \" escapen um " zu bekommen
 
ja das ; war nicht makiert und ist nicht kopiert worden :lol: xD und ja bin gerade selber darauf gekommen das es einfach nur banal ist und zwar die hochkomme fehlen danke trotzdem manchmal sieht man den wald für lauter bäumen nicht

danke trotzdem an euch

lg
 
ja und genau bei solchen fehler könnte dir PreparedStatement helfen. also würde ich dir schon empfehlen dich damit anzufreunden.
 
ah wie genau kann mir das dabei helfen? kann ich sozusagen damit vorgefertigte statments nehmen und mit einzelnen parametern füttern sozusagen??
 
aja da fällt mir noch eine frage ein es gibt den Access befehl DLookup('Spalte','Tabelle') benutz ich um die umfrage id aus einer anderen tabelle zu lesen ohne das ich ein subselect brauche im Update Statment so jetzt ist die frage ob das nur den ersten Datensatz aussliest weil ich eben das problem hab das er mir die falsche ID in die Tabelle Hineinschreibt und ich nicht weiß wie ich das genauer mit einer where bedingung gestallten kann das er mir genau die ID zu der Dazugehörigen Umfrage ausliest und ein in die tabelle Einmelder einschreibt

sorry für dopple post
 
edit:

das problem ist leider doch nicht gelöst bzw hat sich ein neues Entwickelt also ich habe dieses Update Statement:
SQL:
UPDATE Einmelder2 SET UmfrageID = DLookup('UmfrageID','Umfrage2',"Umfragelink='test1'") WHERE LetzteUmfrage=Date() AND Gesperrt = 1;

so im Access funktionierts einbandfrei aber sobald ich ein statement im java mache funktionierts plötzlich nicht mehr -.- dann sagt er mir wieder das 1 Parameter erwartet wurde aber zu wenige gegeben waren

hoffe ich könnt mir helfen

LG
 
Zuletzt bearbeitet:
Hallo Rin,

edit:

das problem ist leider doch nicht gelöst bzw hat sich ein neues Entwickelt also ich habe dieses Update Statement:
SQL:
UPDATE Einmelder2 SET UmfrageID = DLookup('UmfrageID','Umfrage2',"Umfragelink='test1'") WHERE LetzteUmfrage=Date() AND Gesperrt = 1;

so im Access funktionierts einbandfrei aber sobald ich ein statement im java mache funktionierts plötzlich nicht mehr -.- dann sagt er mir wieder das 1 Parameter erwartet wurde aber zu wenige gegeben waren

hoffe ich könnt mir helfen

LG

kann es sein, dass Du vergessen hast, dort die doppelten Anführungszeichen zu maskieren?

BTW:
Java:
 String einmupStmt1 = "UPDATE Einmelder2 " +
                   "SET Einmelder2.Umfragelink = " + Umfragelink + " " +
                   "WHERE Umfragelink = Null AND EinmelderID IN (" +                                   Authentificator.getIdSb() +
                   ")";
                 PreparedStatement einmupPrepSt1 = con.prepareStatement(einmupStmt1);
                 boolean einmupresult1 = einmupPrepSt1.execute();
Was macht das für einen Sinn, PreparedStatements zu verwenden und dann
das SQL-Statement doch selbst zusammen zu basteln statt Parameter zu verwenden?


VG ROlf
 
Hallo r.w.

also ja das erste problem waren die doppelten anführungs zeichen das hab ich shcon gemerkt und ja das mit preparedstatements hab ich jetzt auch geändert ich wusste nur nicht wie ich das benutzen sollte nur da ich mir denke das ich dieses update statment noch nicht mal zum laufen gebracht hab ohne das ich ein prepared statement draus mach würd ich gern raus finden wieso der nichts macht so

jetzt hab ich lang gegooglet gestern und raus gefunden das die ODBC Driver 1.2 - 1.4 das Dlookup mit 3 parametern nicht unterstützt darum funktioniert es im access aber im java über die ODBC Brücke nicht ...... jetzt hab ich mich daran gesetzt ein neues Update Statement zu schreiben das sieht wie folgt aus:
SQL:
UPDATE Einmelder2 INNER JOIN Umfrage2 ON Einmelder2.UmfrageID=Umfrage2.UmfrageID SET Einmelder2.UmfrageID = Umfrage2.UmfrageID
WHERE Umfrage2.Umfragelink="asdasd" And Einmelder2.LetzteUmfrage=Date() And Einmelder2.Gesperrt=0;

so das funktioniert von der grundfunktion das er etwas updaten will aber immer 0 Zeilen obwohl ich die kriterien in meinen augen richtig definiert habe aber vielleicht sie ja ein andere von euch einen fehler die Tabellen schauen wie folgt aus:
Tabelle Einmelder2
  • EinmelderID (PK)
  • Einmelder
  • EinmelderEmail
  • LetzteUmfrage
  • UmfrageID (mit Beziehung zur Tabelle Umfrage2)
  • Gesperrt (boolean)

Tabelle Umfrage2
  • UmfrageID (PK)
  • Umfragelink
 

Neue Themen


Zurück
Oben