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.
SET DELETED ON/OFF [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- 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]
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
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 !
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
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
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.
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!!
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!!