Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verständnisproblem - Warum funktioniert mein DELETE nicht? (https://www.delphipraxis.net/140453-verstaendnisproblem-warum-funktioniert-mein-delete-nicht.html)

Mithrandir 18. Sep 2009 13:02

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS 6.6.x

Verständnisproblem - Warum funktioniert mein DELETE nicht?
 
Hi ihr,

irgendwie stehe ich gerade auf dem Schlauch. Dieser Code:

Delphi-Quellcode:
  procedure TDGHBDatabase.DeleteUserByName(Name: String);
  var
    DeleteUserQuery : TZQuery;
  begin
    DeleteUserQuery := TZQuery.Create(nil);
    with DeleteUserQuery do
      begin
        Connection := fConnection;
        ParamCheck := true;
        SQL.Text := 'DELETE FROM USERS WHERE USER_NAME = :user ';
        ParamByName('user').AsString := Name;
        ExecSQL;
      end;
    DeleteUserQuery.Free;
  end;
soll einen bestimmten Nutzer aus der Datenbank entfernen. Der Name existiert und wird korrekt übergeben. Die Tabelle existiert, die Spalte existiert - und dennoch: Aus der Datenbank wird der Eintrag nicht gelöscht. Jemand ne Idee, woran das liegen kann/was ich falsch mache? :gruebel:

DeddyH 18. Sep 2009 13:10

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Ich denke mir, das with in Verbindung mit "Name" ist Schuld. Geht es so?
Delphi-Quellcode:
procedure TDGHBDatabase.DeleteUserByName(const sName: String);
  var
    DeleteUserQuery : TZQuery;
  begin
    DeleteUserQuery := TZQuery.Create(nil);
    try
      with DeleteUserQuery do
        begin
          Connection := fConnection;
          ParamCheck := true;
          SQL.Text := 'DELETE FROM USERS WHERE USER_NAME = :user ';
          ParamByName('user').AsString := sName;
          ExecSQL;
        end;
    finally
      DeleteUserQuery.Free;
    end;
  end;

Mithrandir 18. Sep 2009 13:11

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Jetzt weiß ich, warum "with" so "gefährlich" ist. :wall:

Danke, Detlef, daran lags. ;)

Tyrael Y. 18. Sep 2009 13:13

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
hat sich erledigt

DeddyH 18. Sep 2009 13:15

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
In den meisten Fällen vermeide ich das with auch, dann hat man eine potentielle Fehlerquelle weniger :zwinker:
@Tyrael: Der Doppelpunkt ist schon richtig, da es sich um ein parametrisiertes Statement handelt.

Mithrandir 18. Sep 2009 13:21

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Stimmt wohl - nur ist es halt so... bequem.. :angel2:

Nersgatt 18. Sep 2009 13:27

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Zitat:

Zitat von Daniel G
Stimmt wohl - nur ist es halt so... bequem.. :angel2:

Diese Fehler, wie hier aufgetreten, machen das With sehr unbequem - finde ich. Daher benutze ich es nicht und schreibe auch Stellen von meinem Vorgänger entsprechend um.

Gruß

Angel4585 18. Sep 2009 13:44

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Deshalb haben bei mir Argumente einer Funktion generell ein A vorne :angel2: dann heisst halt AName un geht ;)

shmia 18. Sep 2009 13:57

Re: Verständnisproblem - Warum funktioniert mein DELETE nich
 
Der Übergabeparameter sollte so deklariert sein:
Delphi-Quellcode:
procedure TDGHBDatabase.DeleteUserByName(const UserName: String);
"UserName" ist einfach klarer und aussagekräftiger als nur "Name".
Also ich spare mir die Ungarische Notation (Ausnahme Windows-API) und suche stattdessen nach besseren Bezeichnungen.
Man kann natürlich unterschiedlicher Meinung sein aber ich folge hier dem sehr empfehlenswerten Buch "Clean Code: A Handbook of Agile Software Craftsmanship".


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz