Autor | Thema: dbPack() und dbUndelete() | | Datum:02.08.02 17:40 
(MMJ-Hoyerswerda@gmx.de) | |
Hallo Profan²er,
ich habe zwei Fragen zum Arbeiten mit dBase-Datenbanken.
1. Gibt es eine Möglichkeit, nur die Anzahl der als gelöscht markierten Datensätze einer Tabelle feststellen zu können, ohne diese Datensatz für Datensatz von Anfang bis Ende zu Fuß via dbGo(">") und %dbDeleted abgrasen zu müssen?
2. Gibt es eine Möglichkeit, nur einen einzigen von mehreren als gelöscht markierten Datensätzen wiederherzstellen? Zur Zeit mache ich es so: Alle, bis auf den Wiederherzustellenden zum "Merken", in eine (unsichtbare) Listbox kopieren, danach beim Wiederherzustellenden die Löschmarkierung entfernen und die gesamte Tabelle packen (dbPack()). Anschließend alle DS aus der (unsichtbaren) Listbox zurückkopieren und wieder als gelöscht markieren. Funktioniert zwar, ist aber bei größeren Tabellen (ca. 50000 DS) ein Geschwindigkeitsproblem. Geht das vielleicht einfacher zu realisieren?
Sehe ich vielleicht nur mal wieder den Wald vor lauter Bäumen nicht?
Profan² 6.6 / 7.5 und Win 98.
Danke im voraus für Hinweise und Tipps.
Dietmar
|
| | Datum:02.08.02 18:45 
(mrk@mrk-soft.de) | |
Hi,
Aemmmm, Punkt 2, ...... dbUnDelete !!!.
Einfach den Datensatz wieder als nicht gelöscht setzen. ???
|
| | Datum:02.08.02 19:03 
(MMJ-Hoyerswerda@gmx.de) | |
Sorry Thorsten, muß wohl an der Hitze liegen.
Natürlich sollte die 2. Frage lauten:
2. Gibt es eine Möglichkeit, nur einen einzigen von mehreren als gelöscht markierten Datensätzen endgültig zu löschen?
Dietmar
|
| | Datum:03.08.02 07:36 
(mrk@mrk-soft.de) | |
Dann wären es bei beiden Fragen als Antwort: Nein.
Punkt 1.
Eine generelle Abfrage, welche Datensätze gelöscht sind und
welche nicht, gibt es nicht. jeder Datensatz muss da schon
selber ebend durchgetestet wird, bei 5000, klar, dauert da
eine Weile.
Punkt 2.
Erst mal die Frage, warum den Datensätze überhautp als gelöscht
gekennzeichnet sind, wenn diese nicht gelöscht werden sollen.
Das löschen von Datensätzen in *MS db3 Banken läuft über dbPack()
ab, und den löschflag. Nur waum werden den so viele lösch-Falgs
gesetzt, wenn nur dieser eine Datensatz gelöscht werden soll.
Nochwas: Du magst ja keine DLL's, jedenfalls nicht so richtig,
allerdings könnte ich die EasyDB anbieten, und zu Punkt 1
dann eine lösung anbieten, zu Punkt 2 ,müste man sehen, nur
der Sinn ist mir da nicht so ganz klar.
|
| | Datum:03.08.02 13:00 
(prof.chaos@netcologne.de) | |
Hallo,
1. du könntest eine Variable benutzen, und sie bei jedem dbDelete um 1 erhöhen, bei jedem dbUndelete um 1 erniedrigen und bei jedem dbPack zurück auf 0 setzen.
Sebastian
|
| | Datum:04.08.02 19:52 
(MMJ-Hoyerswerda@gmx.de) | |
Hallo,
und Danke für die bisherigen Antworten.
'1. du könntest eine Variable benutzen, und sie bei jedem dbDelete um 1 'erhöhen, bei jedem dbUndelete um 1 erniedrigen und bei jedem dbPack 'zurück auf 0 setzen.
... und den Wert in einer *.ini zwischenspeichern.
@Sebastian:
Mann, oh Mann, manchmal sieht man wirklich den Wald vor lauter Bäumen nicht ... Danke für den Hinweis.
@Torsten:
zu Punkt 2: Der Sinn besteht darin, daß man ggf. Änderungen rückgängig machen können soll. Also eine Art Undo-Funktion, und dies dürfte heutztage Standard sein...
Kann mich übrigens nicht daran erinnern, ungern DLLs einzusetzen, im Gegenteil: Sebastian Königs SK*.DLLs und Frank Abbings ProSpeed.DLL gehören bei unseren Hoyerswerdaer Profan²ern und mir schon lange zum "Standard-Profan²-Zubehör". Seit kurzem bin ich übrigens fasziniert von Mischa Brands PACK.DLL und UNPACK.DLL -> http://www.thinkrelative.de/PCompressor.exe
Natürlich werde ich mir demnächst auch Deine EasyDB.DLL genauer ansehen. Hatte bislang einfach nur noch keine richtige Verwendung dafür.
MfG
Dietmar
|
| | Datum: 10.08.02 21:11 
(carlo.keil@web.de) | |
Hallo Dietmar,
nicht nur unter Performance-Gesichtspunkten scheint mir folgendes Vorgehen überlegenswert:
Die als gelöscht markierten Sätze werden in eine zweite dbf-Datei geschreiben (und dort nicht als gelöscht gekennzeichnet) und in der ersten Datei mit dbPack gelöscht. In der zweiten Datei kann jetzt problemlos ein einzelner Satz endgültig gelöscht werden. Alle nicht gelöschten Sätze der zweiten Datei stehen immer noch für eine Rückgängig-Funktion zur Verfügung.
HTH
Carlo
|
|
|