Autor Beitrag
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Mi 17.07.02 21:07 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: 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.

_________________
Keine Signatur ...
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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.

_________________
Live long and prosper
MrSpock \\//
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: 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.

_________________
Keine Signatur ...
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Do 18.07.02 17:35 
Hmm, also bei mir klappt es ... liegt wohl an meinen Wunderfingern ;-))

Hier mal der Source:
ausblenden 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 ...
www.faqsen.de/find.j...554850495551505155;2

_________________
Keine Signatur ...
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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.

_________________
Live long and prosper
MrSpock \\//
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: 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

_________________
Keine Signatur ...
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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