Autor Beitrag
Kaweb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 16.03.03 12:23 
hallo,

ich benutze die Komponente TDbf für meine Datenbank. Ich kann aber keine der erstellten Datenbanken "name.dbf" aus dem Programm löschen, da das Programm diese Datei noch in benutzung hat. Kann man das beim löschen ignorieren? Oder kann man irgendwie die Datei vom Programm freigeben?

Es bringt leider auch nix, wenn ich das Table vor dem löschen der Datei deaktiviere. Auch das schließen (Table.Close) bringt nichts!

thx für eure Hilfe!
Andreas

Moderiert von user profile iconTino: Werbelink entfernt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mo 17.03.03 03:02 
hallo kaweb!

entweder ist die tabelle immer noch geöffnet und deshalb lässt sie sich nicht löschen, oder du verwendest sie gleichzeitig mit einer anderen anwendung oder du hast das programm einmal vorzeitig beendet und die tabelle dabei nicht geschlossen. windows vermutet dich immer noch als in der tabelle arbeitend. wie siehts nach einem neustart des pc's aus?

mfg, stefan
ps: hast du in den eigenschaften der tabelle 'active' gleich auf true gestellt? dann stell sie auf false und öffne die tabelle erst im programm. vielleicht hilft das.
Kaweb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 17.03.03 17:48 
ich setze active erst beim programmstart auf true. wenn ich eine andere datenbank öffne, setze ich erst active auf false und gib dann bei filepath die neue an. dann setze ich active auf true. und wenn ich sie löschen will, dann wird vor dem löschen active auf false gesetzt und dann die default datenbank geladen und active wieder auf true gesetzt (über eine variable merk sich das prog. wie die zu löschende db heist) nun lösche ich die datei. aber das geht nicht. sobald ich das programm schließe, kann ich die datei löschen!

thx
Andreas
www.kaweb.de
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mo 17.03.03 18:24 
hallo andi!

also bis hierher ist es mir klar...
Zitat:
ich setze active erst beim programmstart auf true. wenn ich eine andere datenbank öffne, setze ich erst active auf false und gib dann bei filepath die neue an. dann setze ich active auf true. und wenn ich sie löschen will, dann wird vor dem löschen active auf false gesetzt


aber ab da blick ich nicht ganz durch
Zitat:

und dann die default datenbank geladen und active wieder auf true gesetzt .....


was ist denn eine 'default datenbank'?
wie wärs mit ein paar code-zeilen? deiner beschreibung nach sollte es so funktionieren.

mfg, stefan
ps: vor längerer zeit hab ich mir auch mal die TDbf-komponente angesehen, aber an solche phänomäne kann ich mich nicht erinnern *g*
Kaweb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 17.03.03 19:49 
sorry, hab mich etwas schlecht ausgedrückt.

ich habe für mein programm eine datenbankdatei (default.dbf) die nicht gelöscht werden kann. der user kann aber so viele datenbanken erstellen wie er will. wenn der user eine wieder löschen will, muss er diese aufrufen. dann klickt er auf Löschen. Jetzt wird der Name der geöffneten Datenbank ausgelesen und in eine String Variable gespeichert. Danach wird Table.Active auf False gesetzt und in Table.TableName wird "default.dbf" eingetragen. Nun wird Table.Active auf True gesetzt. Jetzt wird mit DeleteFile die Datenbankdatei aus der Stringvariable gelöscht.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Tdel_database_form.SpeedButton1Click(Sender: TObject);
var
  delfile : string;
begin
     delfile := main_form.Table1.TableName + '.dbf';
     main_form.Table1.Active := false;
     main_form.Table1.Active := true;
     if deletefile(ExtractFilePath(ParamStr(0)) + delfile) = false then
     showmessage('Die Datei konnte nicht gelöscht werden.');
     main_form.WriteLog('Datenbank "' + main_form.Table1.TableName + '" gelöscht');
     main_form.UpdateOpenDB;
     close;
end;


thx für deine Hilfe
Andreas
www.kaweb.de