![]() |
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:
Jetzt das wo es bei mir gerade Hakt.
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; 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. |
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.
|
Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
Mal ein paar Änderungen eingebaut:
Delphi-Quellcode:
Wobei die Verwendung von SQL-Parametern noch einen Tick besser wäre ;)
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; |
Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
Unterstützt den SqLite Parameter für Datenbankobjekte?
|
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: |
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; |
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? |
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.
|
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).
|
Re: Seltsames Verhalten bei ZEOS und SQL UPDATE?
Danke für die erklärungen :)
:cheer: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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-2025 by Thomas Breitkreuz