AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bookmark

Ein Thema von Tau · begonnen am 5. Nov 2003 · letzter Beitrag vom 5. Nov 2003
Antwort Antwort
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

Bookmark

  Alt 5. Nov 2003, 04:52
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 )
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Bookmark

  Alt 5. Nov 2003, 06:13
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
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Bookmark

  Alt 5. Nov 2003, 08:31
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


mfg
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Bookmark

  Alt 5. Nov 2003, 09:22
Beim Entwickeln eines TDataSet-Descendants, also zB beim Entwickeln der TQuery-Komponente selbst, muss man lediglich Funktionen zum
  • *Erzeugen eines Bookmarks und Rückgabe eines Pointers auf ihn,
    *Löschen eines Boockmarks hinter einem Pointer und
    *Platzieren des Cursors, auf den der Bookmark hinter einem Pointer zeigt
für die äußere Schnittstelle implementieren.
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?).
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Bookmark

  Alt 5. Nov 2003, 09:30
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Bookmark

  Alt 5. Nov 2003, 10:06
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
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Bookmark

  Alt 5. Nov 2003, 10:22
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:

SELECT Max(ID) FROM myTable WHERE ID <= :gemerkteID
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bookmark

  Alt 5. Nov 2003, 13:59
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.

besten Danke für den Tipp

mfg
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 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