Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeos + Firebird - übernehmen von Werten in Update-Statement (https://www.delphipraxis.net/51467-zeos-firebird-uebernehmen-von-werten-update-statement.html)

EnORItZ 12. Aug 2005 19:37

Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: Zeos-Controlls

Zeos + Firebird - übernehmen von Werten in Update-Statement
 
Hallo,

ich benutzte die ZeosDB-Komponenten um auf den embedded Firebird-Server zuzugreifen.

Ich habe eine Funktion QueryString, die ein SQL-Query durchführt:
Delphi-Quellcode:
function QueryString(pStr: String; pExec: Boolean = false): TZQuery;
begin
 result:=TZQuery.Create(nil);
 with result do
 begin
  Connection := ZConnection1;
  CachedUpdates:=false;
  RequestLive:=True;
  SQL.Text:=pStr;
  if pExec then ExecSQL else Open;
 end;
end;
In einer Tabelle (kein DBGrid oder sowas) sollen nun alle Datensätze angezeigt werden, also übergeben ich mein Select-Statement ("SELECT * FROM KUNDEN WHERE UPPER(NAME) LIKE '%';"), verarbeite alle zurückgelieferten Records und habe im Endeffekt meine Tabelle aus der Datenbank dargestellt.
Suchen erfolgt wie oben im SELECT mit einem Platzhalten, sodass man auch nach Teilen eines Namens suchen kann.

Ich übergebe nun meinen Query-String mit dem Update-Statement, welches wie folgt aussieht, um einen Datensatz zu ändern (Beispiel):
Zitat:

UPDATE KUNDEN SET NAME = 'MEYER' WHERE ID = 5;
In diesem Beispiel z.B. wird ein Kundenname von "Schulze" zu "Meyer" geändert.

Werden allerdings die neuen Datensätze in der Tabelle dargestellt (oder auch nicht), befindet sich immer noch der alte Name "Schulze" in der Tabelle (Such nach allen Namen mit "WHERE NAME LIKE '%';"). Such ich allerdings nach Namen wie 'SCHU%', was den Datensatz mit dem Namen "SCHULZE" zurückliefern sollte, so gibt es kein ergebnis. Die Suche nach 'MEY%' liefert ein Ergebnis.

Dieses Verhalten ist für mich absolut nicht nachvollziehbar. Hat jemand von euch eine Idee die mich einen Schritt weiterbringen könnte?

MagicAndre1981 12. Aug 2005 21:02

Re: Zeos + Firebird - übernehmen von Werten in Update-Statem
 
Hi,

du musst erst ein Commit durchführen, sonst werden die Daten nicht in die DB geschrieben.

André

EnORItZ 13. Aug 2005 12:11

Re: Zeos + Firebird - übernehmen von Werten in Update-Statem
 
Hmm... Also wenn ich im nach dem Query Apply- und dann CommitUpdates aufrufe gibts ne Fehlermeldung, dass diese Operationen nicht bei einer geschlossenen Datenmenge ausgeführt werden können. Scheint ja auch relativ logisch, weil ich ja ExecSQL statt Open für das Update verwende.

Wenn ich das ganze über die ZConnection mache (also mit der Commit-Methode), dann passiert gar nichts.
Nach einem Neustart des Programms (ob mit Commit oder ohne) sind die Daten in der Datenbank übernommen worden.

Gehts vieleicht mit der TZUpdateSQL-Klasse? Und wie verwende ich die, oder liegts an etwas ganz anderem?


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