Entwickler-Ecke
Datenbanken - Brauche Hilfe bei : DBIPackTable() unit: bde;
catweasel - Mi 17.07.02 21:07
Titel: Brauche Hilfe bei : DBIPackTable() unit: bde;
Hi,
Ich hab gelesen dass man mit der DBIPackTable() Dbase Datenbanken packen kann, also alle Datensätze mit Dbase Löschflag endgültig entfernen.
Dabei müsste die Dateigrösse (je nach Anzahl der Löschvorgänge), kleiner werden.
Bei folgendem Funktionsaufruf:
Quelltext
1: 2:
| tabelle : TTable; dbipacktable(tabelle.dbhandle,tabelle.handle,'fahrten.DBF','DBASE',true); |
kommt es zwar zu keiner Fehlermeldung, aber Erfolg hat es auch nicht.
Die Grösse der DBF Datei ändert sich kein bischen, da tut sich nix...
Alle Beispiele die ich gefunden habe gehen aber auch gan z genauso....
Was mach ich falsch..
Nebenbei... Wie ist das mir dem "exklusiven" öffnen zu verstehen, das soll man da nämlich machen...
Thanks 4 help
Catweasel
Code-Tag hinzugefügt. Marc
Steffer - Do 18.07.02 08:10
Sind denn nachher markierte Datensätze noch vorhanden?
Exclusiv bedeutet, dass zu diesem Zeitpunkt niemand anders die Tabelle im Gebrauch haben darf.
MrSpock - Do 18.07.02 08:24
Hallo catweasel,
ich meine, dass du vor einem Aufruf irgendeiner DBI-Funktion erste einmal DBIInit (oder so ähnlich) aufrufen musst. Heute Abend schaue ich noch einmal nach und gebe die weitere Infos.
catweasel - Do 18.07.02 13:56
Titel: Danke schonmal
Hi,
Hmm, ich öffne die Tabelle ganz exklusiv......
Wie kann ich die "DBase-mässig" gelöschten Datensätz anzeigen lassen ????
Mit "gelöschten" Sätzen habe ich bisher nur im Zusammenhang mit CachedUpdates zu tun gehabt.
Schonmal Danke für das Stichwort mit dem DBInit...
Weitere Infos wären echt cool,
CU
Catweasel
Steffer - Do 18.07.02 15:15
Also mit Init hat das imho nix zu tun.
Probier mal folgendes:
Lege eine DBase-Tabelle mit 10 Datensätzen an.
Jetzt greifst du mit einem Testprogramm drauf zu und sagst bei 5 Datensätzen Delete.
Öffnest du die Datenbank jetzt mit der Datenbankoberfläche => umstrukturieren + komprimieren.
Wenn du dir jetzt die Grösse anschaust, wurde die DB kleiner.
Was die Datenbankoberfläche macht, sollte auch DBIPackTable() können.
catweasel - Do 18.07.02 17:06
Titel: Macht es eben nicht .....
Hi...
Sehr richtig.....
In der Datenbankoberfläche klappt das auch wunderbar. nur Die
der Funtionsaufruf bringt kein Ergebniss.
Das ist ja das Rätsel...
CU
Catweasel
Steffer - Do 18.07.02 17:35
Hmm, also bei mir klappt es ... liegt wohl an meinen Wunderfingern ;-))
Hier mal der Source:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure PackTable(Table: TTable); begin if not Table.Active or not Table.Exclusive then begin Showmessage('Datenbank muss exclusiv geöffnet sein'); exit; end; Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True)); Table.Open; ShowMessage(Table.TableName + ' wurde gepackt'); end; |
und hier die Demo wenn es noch immer nicht klappen sollte ...
http://www.faqsen.de/find.jsp?FAQ=1;495648554850495551505155;2
MrSpock - Do 18.07.02 20:43
@Steffer: Ich hab's nicht ausprobiert, aber das BDE - Handbuch (ist schon etwas älter!) sagt:
Zitat: |
DBIInit must be called once by each client application before any other calls are made. |
Es kann jedoch sein, dass es bei neueren BDEs so nicht mehr gibt oder der Text im Handbuch nicht ganz korrekt ist.
catweasel - Do 18.07.02 21:47
Titel: Danke für den Quellcode.. etwas mehr licht, aber neues Prob
Hi..
Erstmal Danke Steffer für den Quellcode.....
Jedesmal wenn ich deine Funktion aufrufe lande ich im "Datenbank muss exklusiv geöffnet sein" Zweig...
Dabei glaub ich eigentlich nicht, dass die vor mir einer aufmacht.....
Kann mir einer bei der Gelegenheit die verschiedenen "Betriebsarten" von Tabellen kurz näher bringen....
Wäre cool
Catweasel
Steffer - Do 18.07.02 22:23
Ei Kerle .... dafür ist die Demo ...
Du must in deinem TTable.Exclusiv:= True; setzen...
Nachtrag:
Hast du Exclusiv:= True; dann fang Table.Open in einem Try..except..Block ab.
Try = Keine anderer
Except = Die Datenbank ist durch einen anderen Anwender geöffnet
catweasel - Do 18.07.02 22:30
Titel: Nu läufts....
Hi...
Nu läufts auch bei mir....
lag tatsächlich an der exklusivmethode.....
War irgenwie verpeilt....
Danke für die Mühe....
CU
Catweasel
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!