AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi abnormales paradox verhalten
Thema durchsuchen
Ansicht
Themen-Optionen

abnormales paradox verhalten

Ein Thema von Nightfly · begonnen am 19. Aug 2004 · letzter Beitrag vom 19. Aug 2004
Antwort Antwort
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#1

abnormales paradox verhalten

  Alt 19. Aug 2004, 12:05
es geht um folgenden code:

Delphi-Quellcode:
Table1.Active := false;
Table1.IndexName := '';
Table1.Active := true;
Table1.First;
repeat
if Table1Keep.Value = 1 then begin end
                           else Table1.Delete;
until Table1.FindNext = false;
Eigentlich sollte der aus meiner tabelle ja alle datensätze, in denen keep nicht i ist, löschen. Die datenbank hat ca. 25.000 Datensätze, übrig bleiben sollen 1388 (das weiß ich aus ner sql abfrage) nun, wenn ich diesen code einmal ausführe sind danach noch ca. 7000 datensätze vorhanden. durch mehrmaliges ausführen des codes komm ich auch irgendwan auf die 1388. aber warum? eigentlich sollte doch einmaliges ausführen reichen,oder?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: abnormales paradox verhalten

  Alt 19. Aug 2004, 12:15
Hi,


hast du schonmal mit ner SQL-Abfrage versucht? Wenn ja, kommt da das gleiche raus?
  Mit Zitat antworten Zitat
UweR

Registriert seit: 15. Mär 2004
Ort: Bad Marienberg
219 Beiträge
 
Delphi 7 Professional
 
#3

Re: abnormales paradox verhalten

  Alt 19. Aug 2004, 12:38
Hallo,

1. Warum dieser Aufwand, das kann man doch sicher mit einer DELETE-Abfrage erschlagen. Z.B. mit
DELETE FROM Table1 WHERE KEEP <> 1 oder so ähnlich.

2. Ich glaube das Problem liegt darin das das Löschen von Datensätzen das FindNext etwas verwirrt und womöglich das folgende passiert:

Du findest einen zu löschenden Datensatz an Position 3 und löschst ihn. Die darüberliegenden Fallen alle Position runter. Wenn jetzt der ehemals vierte (jetzt dritte) auch zu löschen wäre wird der aber bei FindNext verschlabbert weil ja erst beim jetzigen vierten (ehemals fünf) wieder weitergesucht wird.
Gruß
UweR
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: abnormales paradox verhalten

  Alt 19. Aug 2004, 15:09
Um deine Frage zu beantworten, warum deine Routine nicht funktioniert:

Paradox setzt den Datensatz-Zeiger automatisch auf den nächsten Datensatz, wenn du einen Datensatz löschst. Du weist aber auch nach einem Delete ein Next an, das bedeutet, daß du einen Datensatz ungeprüft überspringst.

Eine Mögliche Lösung wäre:

Code:
while not Table1.Eof do
  if Table1Keep.Value = 1 then
    Table1.Next
  else
    Table1.Delete;
Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  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 19:47 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