Datenbank, funktion UPDATE funktioniert nicht
-
Hallo,
ich habe ein Problem mit eine Access Datenbank.
In meinem Programm möchte ich die Datenbank aktualisieren. Dazu wählt man einen Datensatz (darauf klicken) und klickt auf einen Button.
Um auch den richtigen Datensatz zu aktualisieren, habe ich ein DBEdit Feld, in der die ID des selektierten Datensatz steht.
Mein Quelltext sieht dann so aus.Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("UPDATE Tabelle1 SET Prioritaet = 'Hoch' where ID like :ID "); Query1->ParamByName("ID")->AsString=Form1->DBEdit1->Text; Query1->ExecSQL();Leider passiert aber nichts, der Datensatz bekommt nicht die aktuellen Daten reingeschrieben und eine Fehlermeldung kommt auch nicht.
Kann mir jemand helfen???
-
1. Was passiert denn wenn Du die ID in den SQL-String zur Differentialdiagnostik fest einbaust und erstmalauf den Parameter verzichtest?
2.Wieso 'like'? Wieso nicht =id? Ist das kein Primärschlüssel?
-
Wie meinst du das mit fest einbaust?
wenn ich like durch = ersetze, passiert auch nichts!
-
Hallo,
was witte_ meinte ist, dass Du mal das UPDATE-Statement "hard-codiert"
reinschreiben solltest, anstatt ein parametrisiertes Statement zu verwenden.
Ich habe jüngst auch mit Acces die Erfahrung gemacht, dass Parameter nicht
so reibungslos zu funktionieren scheinen (oder nicht wie von andere DBMSen
gewohnt).Was heißt eigentlich:
Jürgen_P schrieb:
Leider passiert aber nichts, der Datensatz bekommt nicht die aktuellen Daten reingeschrieben und eine Fehlermeldung kommt auch nicht.
Wird der Datensatz in der DB nicht geändert oder siehst Du die Änderung nur nicht
in Deiner Applikation?Meine Vorgehensweise ist normalerweise, dass ich ein Statement zunächst
direkt auf der DB ausführe (d.h. bei Dir innerhalb Access), dann einfach
in meinen Source-Code rüberkopiere und am Schluss Parameter einfüge.
Hast Du das auch so ähnlich gemacht?Gruß
Alexander
-
Nein, ich habe nichts hard-codiert.
Der Datensatz wird in der DB nicht geändert.
Ich gehe davon aus, dass das Problem mit dem Feld ID zusammenhängt, da dieses Feld ein Autowert Feld ist.
Wenn ich das DBEdit auf eine andere Spalte setze und dann die Abfrage auch auf diese Spalte, dann geht es.
Nur leider ist die einzigste Spalte, in der es einen einmaligen Eintrag gibt, die ID Spalte.
-
Jürgen_P schrieb:
Nein, ich habe nichts hard-codiert.
Das könntest Du aber mal testweise machen - das war der ursprüngliche Vorschlag.
Der Sinn dahinter ist, mögliche Ursachen für das Fehlverhalten auszuschließen.Eine Möglichkeit wäre beispielsweise ein neues Projekt zu erstellen, das genau
ein - hard-codiertes - UPDATE-Statement auf der DB ausführt.Gruß
Alexander
-
eventuell liegt es ja auch daran, dass ID einen Integer und keinen String verlangt (AsInteger)
-
Ist AutoWert überhaupt ein Integer32-Typ? Kannst Du vor Deinem Update die Autospalte mit einer Konvertierungsfunktion in ein Integer wandeln? Also "UPDATE Tabelle1 SET Prioritaet = 'Hoch' where Int(ID) = :ID "
Ich kenn den Namen der Konvertierungsfunktion nicht, schau mal in der Access-Doku nach.
-
Ich kann mit Integer nicht arbeiten, wenn ich
[cpp]Query1->ParamByName("ID")->AsInteger=Form1->DBEdit1->Text;
[/cpp]schriebe, dann bekomme ich die Fehlermeldung "Canot convert String to Integer"
-
Query1->ParamByName("ID")->AsInteger = Form1->DBEdit1->Text.ToInt();
-
Und diese gesamte Konvertiererei kann man sich sparen, wenn man, statt das DBEdit zu missbrauchen, direkt die zugehörige DataSource verwendet...