Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Seltsames Verhalten bei ZEOS und SQL UPDATE? (https://www.delphipraxis.net/128282-seltsames-verhalten-bei-zeos-und-sql-update.html)

ryLIX 27. Jan 2009 12:37

Datenbank: SQLite • Version: 3 • Zugriff über: ZEOSLib

Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Moin :hi:

Ich bin gerade etwas verwirrt :gruebel:
Folgendes geht vor sich:
Ich Möchte ein VARCHAR Feld in einer Tabelle ändern.
Dazu rufe ich ein modales Formular auf und lasse den User den Text eingeben.
Wenn er dann Ok klickt solls per SQL UPDATE in die Datenbank.
Nun kommt der Haken.
Hier der QT:

Delphi-Quellcode:
procedure TMain.btnChangeCommentClick(Sender: TObject);
begin
  if lbFSW.ItemIndex <> -1 then
  begin
  CommentForm.ShowModal;
  if CommentForm.ModalResult = mrOK then
      ShowMessage('UPDATE '+table+' SET COMMENT ="'+CommentUnit.Comment+'" WHERE FSW ="'+col+'"');
      ZQuery1.SQL.Clear;
      ZQuery1.SQL.Add('UPDATE '+table+' SET COMMENT ="'+CommentUnit.Comment+'" WHERE FSW ="'+col+'"');
      ZQuery1.Open;
      ZQuery1.Close;
    lbFSWClick(Self);
  end;
end;
Jetzt das wo es bei mir gerade Hakt.
Wenn ich ShowMessage nicht aufrufe bekomme ich eine "LogicalError/Missing Database" Exception.
Wobei die Message gernicht angezeigt wird wenn sie Aufgerufen wird!?! :wiejetzt:

Warum? :gruebel:
Ich verstehs gerade nicht.
Alle Variablen enthalten Daten und auch die Korrekten.
Mit dem Aufruf von ShowMessage wird auch alles richtig eingetragen.

Bernhard Geyer 27. Jan 2009 12:39

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
UPDATES/INSERTS/DELETES werden mit Exec(SQL) und nicht mit Open ausgeführt. Open erwartet einen Resultcurser welcher bei diesen SQL-Befehlen nicht vorhanden ist.

DeddyH 27. Jan 2009 12:42

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Mal ein paar Änderungen eingebaut:
Delphi-Quellcode:
procedure TMain.btnChangeCommentClick(Sender: TObject);
begin
  if lbFSW.ItemIndex <> -1 then
  begin
  if CommentForm.ShowModal = mrOK then
    begin
      //ShowMessage('UPDATE '+table+' SET COMMENT ="'+CommentUnit.Comment+'" WHERE FSW ="'+col+'"');
      ZQuery1.SQL.Text := 'UPDATE '+table+' SET COMMENT ="'+CommentUnit.Comment+'" WHERE FSW ="'+col+'"';
      ZQuery1.ExecSQL;
      lbFSWClick(Self);
    end;
  end;
end;
Wobei die Verwendung von SQL-Parametern noch einen Tick besser wäre ;)

mkinzler 27. Jan 2009 13:11

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Unterstützt den SqLite Parameter für Datenbankobjekte?

ryLIX 27. Jan 2009 13:14

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Aaah :wall:

Ungewohnt mit Delphi und SQL zu arbeiten ^^
Habs vorher nur mit PHP gemacht.
Danke für den Hinweis nu bin ein ganzes Ende schlauer geworden :)

@mkinzler
Bin ich mir nicht sicher.

:dp:

DeddyH 27. Jan 2009 13:15

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Ich meinte damit jetzt nicht "table", da ich nicht davon ausgehe, dass das funktioniert, aber da standen ja noch 2 Variablen. Also so:
Delphi-Quellcode:
ZQuery1.SQL.Text := 'UPDATE '+table+' SET COMMENT =:comment WHERE FSW =:col';
ZQuery1.ParamByName('comment').AsString := CommentUnit.Comment;
ZQuery1.ParamByName('col').AsString := col;

ryLIX 27. Jan 2009 13:49

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Funktioniert genauso gut.
Wo liegt der Unterschied?
Wäre diese Version "richtiger" oder schneller?
Oder optimaler für die spätere Wartung/Erweiterung?

DeddyH 27. Jan 2009 13:57

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Vor allem stellt sie sicher, dass das Format zum DBMS passt und SQL-Injection ausgeschlossen werden kann.

mkinzler 27. Jan 2009 14:07

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Und das wenn die Abfrage mehrmal ausgeführt wird, das Parsen und optimieren der Abfrage durch das DBMS entfällt ( in diesem Fall nicht, da Tabelle ja gesetzt werden muss).

ryLIX 27. Jan 2009 14:49

Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
 
Danke für die erklärungen :)

:cheer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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