Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Update zeigt keine Funktion (https://www.delphipraxis.net/149869-update-zeigt-keine-funktion.html)

PhilmacFLy 1. Apr 2010 11:04

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:
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;
Autocommit ist auf true gesetzt.
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

DeddyH 1. Apr 2010 11:15

Re: Update ziegt keine Funktion
 
Oben heißt Dein Parameter "id", unten aber "kid". Und sind die ganzen CreateParams überhaupt nötig?

PhilmacFLy 1. Apr 2010 11:16

Re: Update ziegt keine Funktion
 
danke. Ich weiss nicht ich dachte immer man braucht die CreateParams das man die Parameter überhaupt benutzen kann.

DeddyH 1. Apr 2010 11:23

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;

PhilmacFLy 1. Apr 2010 11:31

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?

DeddyH 1. Apr 2010 11:35

Re: Update zeigt keine Funktion
 
CreateParam
Zitat:

Note: Parameters for datasets that represent queries are only created by specifying parameters in the SQL statement. The TParam objects in such as dataset's Params property are created automatically when parameter tokens are added to the SQL statement.

PhilmacFLy 1. Apr 2010 11:47

Re: Update zeigt keine Funktion
 
ok danke

mjustin 1. Apr 2010 12:04

Re: Update zeigt keine Funktion
 
Hi,

Tipp: wenn ExecSQL bei Zeos auch die Anzahl der betroffenen Zeilen zurückliefert

statt

Delphi-Quellcode:
ExecSQL;
dieses:

Delphi-Quellcode:
Assert(1 = ExecSQL, 'Fehler beim Update in ' + SQL.Text);
dann fällt der Fehler sofort auf (es sei denn, Transaktionen werden anschliessend Rollbacked)


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