![]() |
Bookmark
Hallo Leute
Beim Löschen über mehrere Tabellen bin ich gezwungen die Query zu schließen und wieder zu öffnen. Nach den öffnen der DatenBank ist der DB Zeiger logischerweise am ersten DatenSatz. Wenn ich Bookmarks verwende um den DB Zeiger zu verwalten bekomme ich in 2 Situationen Probleme. 1) Es ist nur ein Daten Satz vorhanden 2) Oder der DB Zeiger ist am ende der DatenBank Danach tritt eine Exception auf. Ist auch klar, weil es nach den offnen von der DatenBank um einen oder auch mehrere DatenSätze weniger sind und der Bookmark ins nichts greift. Kann mir jemand einen Tipp geben wie ich das Problem beheben kann. mfg. Tau PS. aus der Hilfe bin ich leider auch nicht schlau geworden. ( oder ich sehe den Wald vor lauter Bäume nicht mehr ) :wall: |
Re: Bookmark
Hi,
eine Bookmark ist ein Pointer, sich da auf eine Gültigkeit nach close open des Datasets zu verlassen, halt ich für riskant. Ich würde in dieser Situation die ID des Datensatzes speichern, und dann den Zeiger über löcate wieder auf dem richtigen Datensatz plazieren. Grüsse Woki |
Re: Bookmark
Hallo woki
Die Idee mit der Laufenden ID und Locate ist nicht schlecht. Aber nach dem Löschen in der DB ( close, open ) ist die ID auch nicht mehr vorhanden und der DB Zeiger bleibt auf dem ersten DatenSatz. Was noch dazukommt ist das die ID nicht durchgehend nummeriert ist z. B. ( 1, 2, 3, 5, 6, 7, 9, 12 usw. ) entsteht durch das Löschen in der DB :gruebel: mfg Tau |
Re: Bookmark
Beim Entwickeln eines TDataSet-Descendants, also zB beim Entwickeln der TQuery-Komponente selbst, muss man lediglich Funktionen zum
Das Speichermanagement der internen Daten obliegt vollständig dem Erben von TDataSet (hier: TQuery). Du kannst Dich daher nicht darauf verlassen, dass die Lösung funktioniert; ich kenne Implementierungen, die so definitiv nicht funktionieren sondern, im Gegenteil, zum Absturz führen würden. Verwende stattdessen einen künstlichen Schlüssel, um die Daten wiederzufinden. Wenn er in der Anzeige stören sollte, verberge die Spalte mit TField.Visible (oder direkt im Grid?). |
Re: Bookmark
Hallo Tau,
Woki meinte einen eindeutigen Verweis auf einen Datensatz, dass kann eine ID sein oder ein anderer Primärschlüssel. Es ist ja kein Problem, wenn dieser nicht fortlaufend ist. Und wenn der Datensatz tatsächlich gelösct wurde, ist es doch OK, dass per default der erste Datensatz angezeigt wird, oder? Ansonsten ginge auch noch FindNearest. |
Re: Bookmark
Hallo MrSpock
Wenn ich davon ausgehe das ich nehmen wir mal an auf den DatenSatz 1550 Stehe und nach dem Löschen auf den ersten dann macht es sehr wohl sinn das der nächste oder der vorhergehende DatenSatz angezeigt wird. FindNearest habe ich bei der ADOQuery Componente leider nicht gefunden. mfg Tau |
Re: Bookmark
Hallo Tau,
je nach Aufbau des Schlüssels könnte in diesem Fall auch Locate mit der Option loPartialKey funktionieren. Ansonsten könntest du den Satz auch über eine Query finden:
SQL-Code:
SELECT Max(ID) FROM myTable WHERE ID <= :gemerkteID
|
Re: Bookmark
Hallo MrSpock
habe loPartialKey ausprobiert leider ohne erfolg. Mir persönlich gefällt die Lösung mit dem Select am besten und ist auch für andere Verwendungszwecke sehr geeignet. :witch: besten Danke für den Tipp mfg Tau |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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