SET DELETED ON/OFF [ERLEDIGT]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

SET DELETED ON/OFF [ERLEDIGT]

Beitrag von Manfred »

Moin,

gerade habe ich ein interessantes Phänomen entdeckt.

Ich habe mich immer gewundert, warum eine DB auf EOF() ging/geht, obwohl sie nicht auf EOF() stand/steht. Nachdem ich dann im Debugger die Sache schrittweise angesehen hatte, mußte ich doch recht stark staunen.

Ich hänge über eine Methode Datensätze an eine Tabelle. Prüfe aber vorher, ob evtl. ein gelöschter Satz vorhanden ist, der dann zurückgeholt und überschrieben wird. Dafür muß vorher SET DELETED OFF gesetzt werden. Dabei wird eine Tabelle in einem anderen Selectbereich auf EOF() gesetzt und das obwohl der Satzzeiger sich NICHT bewegt und die Tabelle NICHT auf EOF() steht. Wenn ich mir RECNO() zeigen lasse, dann wird 3 angezeigt und bei LASTREC() wird 5 angezeigt.

Keine Relationen, nichts. Die Tabelle wird offiziell nicht angerührt.
Es ist auch nicht immer. Keine Ahnung was das soll.

Wollte ich hier auch nur einmal so reingeworfen haben. Ich werde das weiter beobachten und wenn ich weiteres weiß, darüber berichten.
Zuletzt geändert von Manfred am Di, 02. Mär 2010 10:23, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

SET DELETED ON / OFF gilt für alle offenen Dateien (eventuell gibt es ja auch eine Funktion, die man auf eine begrenzen könnte).
Somit muss jede DBF nach einer Änderung darauf reagieren. Wenn du auf einem deleted Satz stehst, und die Filterung einschaltest, dann muss die DBF auf EOF gehen, da der alte Satz ungültig wurde.

Das Recycling der Sätze auf diese Weise ist aber recht umständlich, wie suchst du die deleted Sätze ? Ich habe sowas gelöst indem ich beim Löschen alle Felder auf blank() (leerer Inhalt) und im Indexfeld dann einen Merker (chr(255)) gesetzt habe. Diese Sätze sind somit immer ganz hinten und bei der Anzeige werden diese gefiltert (dbscope etc.).
Somit ist der letzte Datensatz entweder gleich chr(255) oder ich muß append blank aufrufen. Natürlich könnte man auch mit normalem " " oder chr(0) im Indexbegriff arbeiten, dann wären alle freien am Anfang der Datei. Diese indexbasierten Methoden sind sehr schnell !
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Hubert,

1. zunächst das hintere zu erst. Ich mache es genauso, wie Du es machst nur andersherum. Ich leere die Felder und lösche dann. Dann sind alle gelöschten Sätze egal über welchen Index immer vorne.....

2. Die Tabelle steht ja nicht auf einem gelöschten Satz. Alles Fragen, die ich durchleuchtet hatte. Sie steht auf einem Satz, der auf die Bearbeitung wartet. Das ist es ja, was dem normalen Fahrradfahrer den Lenker nach hinten biegt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten