![]() |
Datenbank: Advantage Database, SQL-Server • Version: ? • Zugriff über: UNIDAC
Richtiges Aktualisieren einer Query
Guten Morgen,
folgende Situation: TDBGrid mit TDataSource mit TUniQuery als Dataset. Wie aktualisiert man jetzt zuverlässig die Datenmenge? Eigentlich ja mit "Query.Refresh". Allerdings hat mein Kollege den (evtl. Irr-)Glauben, dass das nicht immer funktioniert, was wir aber noch nicht nachstellen konnten. Laut Delphi-Hilfe ist das auch berechtigt: Anmerkung: Die Methode Refresh funktioniert nicht bei allen von TDataSet abgeleiteten Klassen. Insbesondere TQuery-Komponenten unterstützen Refresh nicht, wenn die Abfrage nicht "live" ist. Um ein statisches TQuery-Objekt zu aktualisieren, schließen und öffnen Sie die Datenmenge. Was ist der Unterschied zwischen "live" und "statisch" in diesem Fall? Ein Close und Open der Query hat natürlich zur Folge, dass z.B. AfterOpens der Query ausgeführt werden, das Grid neugezeichnet wird, man die letzte ausgewählte Zeile erneut suchen muss, etc. |
AW: Richtiges Aktualisieren einer Query
Hallo,
Open/Close ist meine erste Wahl. Es kann sich ja zwischenzeitlich etwas geändert haben. Das Refresh kommt noch aus der guten alten TTable-Zeit. Zitat:
Was benutzt du denn? |
AW: Richtiges Aktualisieren einer Query
Zitat:
|
AW: Richtiges Aktualisieren einer Query
Zitat:
|
AW: Richtiges Aktualisieren einer Query
Zitat:
dann ist doch gut, wenn es bei Dir funktioniert. gestern habe ich mit pgDac gespielt (Devart Komponenten für PostgreSQL) - da hat ein Refresh nicht funktioniert. und bei IBObjects mach ich inzwischen einen großen Bogen sowohl um Refresh als auch um locate. Interessant wäre jetzt wie TUniQuery das Refrehs umsetzt - vielleicht macht das intern einen Open-Close mit Positionierung auf den letzt gewählten Datensatz (falls möglich)... Schon mal in den Source rein geschaut? |
AW: Richtiges Aktualisieren einer Query
Zitat:
Delphi-Quellcode:
Hab mal drübergschaut, die Aktualisierung der Daten passiert im InternalRefresh. Ein Strg+Klick führt mich da in eine leere Prozedur, über F7 beim debuggen verliert es sich dann irgendwann in ASM
procedure TDataSet.Refresh;
begin DoBeforeRefresh; CheckBrowseMode; UpdateCursorPos; try InternalRefresh; finally Resync([]); DoAfterRefresh; end; end; |
AW: Richtiges Aktualisieren einer Query
Zitat:
|
AW: Richtiges Aktualisieren einer Query
Zitat:
Delphi-Quellcode:
überschrieben werden kann. Man muss also dort nachschauen und nicht bei
TUniQuery
Delphi-Quellcode:
.
TDataSet
|
AW: Richtiges Aktualisieren einer Query
Zitat:
Statisch: Die Datenmenge kann nicht bearbeitet werden. z.B. wenn einer Abfrage aus Felder mehreren Tabellen zusammen gesetzt ist. |
AW: Richtiges Aktualisieren einer Query
Zitat:
Weil bei der Query habe ich zwei LEFT JOINS drin, also müsste es ja eine statische Query sein (?), dennoch funktionieren Refresh, Edit und Post dabei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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