![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos
Update zeigt keine Funktion
Hi Dp
ich hab mal wieder ein Problem mit meinem Firebird, und zwar versuch ich ein Update auszuführen, aber in der Datenbank nichts gespeichert wird, aber es taucht auch keine Fehlermeldung auf. Hier mal mein Code:
Delphi-Quellcode:
Autocommit ist auf true gesetzt.
TheStream := TMemoryStream.Create;
if changed then if Application.MessageBox('Wollen sie die Änderungen speichern?', 'Änderungen', MB_YesNoCancel or MB_IconQuestion) = IDYes then begin ZConnection1.Connected := true; with ZQuery1 do begin SQL.Clear; Showmessage(inttostr(kid)); Params.CreateParam(ftSmallint, 'id', ptInput); Params.ParamByName('id').Asinteger := kid; Params.CreateParam(ftWideString, 'sex', ptInput); Params.ParamByName('sex').AsString := cb_anrede.Items.Strings[cb_anrede.ItemIndex]; Params.CreateParam(ftWideString, 'nn', ptInput); Params.ParamByName('nn').AsString := cb_nachname.Items.Strings[cb_vorname.ItemIndex]; Params.CreateParam(ftWideString, 'vn', ptInput); Params.ParamByName('vn').AsString := cb_vorname.Items.Strings[cb_nachname.ItemIndex]; Params.CreateParam(ftWideString, 'str', ptInput); Params.ParamByName('str').AsString := ed_strasse.Text; Params.CreateParam(ftWideString, 'plz', ptInput); Params.ParamByName('plz').AsString := ed_plz.Text; Params.CreateParam(ftWideString, 'ort', ptInput); Params.ParamByName('ort').AsString := ed_wohnort.Text; Params.CreateParam(ftWideString, 'ph', ptInput); Params.ParamByName('ph').AsString := ed_telefonr.Text; if ed_geburtsdatum.Text <> '' then begin Params.CreateParam(ftDate, 'geb', ptInput); Params.ParamByName('geb').Value := ed_geburtsdatum.Text; end else begin Params.CreateParam(ftString, 'geb', ptInput); Params.ParamByName('geb').Value := ed_geburtsdatum.Text; end; me_bemerkung.Lines.SaveToStream(TheStream); Params.CreateParam(ftBlob, 'mem', ptInput); Params.ParamByName('mem').LoadFromStream(TheStream, ftBlob); SQL.Add('UPDATE Kunden SET Name = :nn, Vorname = :vn, Strasse = :str, PLZ = 92431, ort = :ort, Phone =:ph, Geburtsdatum = :geb, Memo = :mem WHERE ID_KDNR = :kid;'); ExecSQL; end; end; Wahrscheinlich ist der Fehler wieder ganz banal nur leider find ich ihn nicht, vllt seht ihr ja was. Edit: Ich hab auch schon versucht einen festen Wert einzutragen, auch ohne Erfolg |
Re: Update ziegt keine Funktion
Oben heißt Dein Parameter "id", unten aber "kid". Und sind die ganzen CreateParams überhaupt nötig?
|
Re: Update ziegt keine Funktion
danke. Ich weiss nicht ich dachte immer man braucht die CreateParams das man die Parameter überhaupt benutzen kann.
|
Re: Update ziegt keine Funktion
Ich würde es einmal so versuchen (keine Gewähr, da direkt im Eingabeeditor eingetippt):
Delphi-Quellcode:
if changed then
if Application.MessageBox('Wollen sie die Änderungen speichern?', 'Änderungen', MB_YesNoCancel or MB_IconQuestion) = IDYes then begin ZConnection1.Connected := true; TheStream := TMemoryStream.Create; try with ZQuery1 do begin SQL.Text := 'UPDATE Kunden SET Name = :nn, Vorname = :vn, Strasse = :str, PLZ = 92431, ort = :ort, Phone =:ph, Geburtsdatum = :geb, Memo = :mem WHERE ID_KDNR = :kid'; Params.ParamByName('kid').Asinteger := kid; Params.ParamByName('nn').AsString := cb_nachname.Items.Strings[cb_vorname.ItemIndex]; Params.ParamByName('vn').AsString := cb_vorname.Items.Strings[cb_nachname.ItemIndex]; Params.ParamByName('str').AsString := ed_strasse.Text; Params.ParamByName('ort').AsString := ed_wohnort.Text; Params.ParamByName('ph').AsString := ed_telefonr.Text; Params.ParamByName('geb').Value := ed_geburtsdatum.Text; me_bemerkung.Lines.SaveToStream(TheStream); Params.ParamByName('mem').LoadFromStream(TheStream, ftBlob); ExecSQL; end; finally TheStream.Free; end; end; |
Re: Update zeigt keine Funktion
Ich versteh aber grad nicht wieso man die Parameter nicht erstellen muss, und sie einfach so zuweisen kann bzw wann muss man den Paramter über haupt createn?
|
Re: Update zeigt keine Funktion
![]() Zitat:
|
Re: Update zeigt keine Funktion
ok danke
|
Re: Update zeigt keine Funktion
Hi,
Tipp: wenn ExecSQL bei Zeos auch die Anzahl der betroffenen Zeilen zurückliefert statt
Delphi-Quellcode:
dieses:
ExecSQL;
Delphi-Quellcode:
dann fällt der Fehler sofort auf (es sei denn, Transaktionen werden anschliessend Rollbacked)
Assert(1 = ExecSQL, 'Fehler beim Update in ' + SQL.Text);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz