Autor Beitrag
Steve1974
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.01.03 00:03 
Hallo !

Ich bin gerade dabei ein Delphi 5, Win98SE Projekt in 7, WinXP weiterzubearbeiten, und habe hier ein Problem mit der BDE.

Ich möchte eine Tabelle mit Table1.DeleteTable löschen, das funktioniert auch, aber dabei sperrt es das Verzeichnis, und ich kann (selbst aus dem Windows Explorer) das Verzeichnis nicht löschen. Fehlermeldung im Explorer sinngemäss >die Datei wird noch von einem anderen Benutzer oder Programm verwendet<. Ausser Delphi läuft aber nix, und die DB liegt lokal auf meiner Festplatte.

Hat jemand eine Idee warum er sperrt, bzw. wie ich die Sperrung
umgeghen kann ?

Bin für jede Idee dankar. :hair:

Steve.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 30.01.03 00:21 
Hallo,

lass mich folgende Vermutung anstellen:

möglich das du damals dieses Verzeichnis mit dem BDE-Admin auf irgendeine Weise belegt / gesperrt hast, bzw. BDE-Admin das sogar von sich aus macht, sozusagen zum Schutz der enthaltenen Daten?

Meine vermutung, weil ich kenn das von unsauberen XP-Installationen über vorhandene W2k/WXP installationen, dann hat das neue BSD nämlich nicht mehr die gleichen zugriffsrechte.. falls du weisst was ich meine..


ich kann mich aber auch irren.. :O

mfg
kiwicht

PS: zum besseren verständnis, ein beispiel aus einer anderen situation:
- wXP installiert, nutzername paulchen, ein privat-verzeichnis gesperrt
- wXP neu installiert, über das alte drüber, nutzername helge, kommt auf das privat-verzeichnis nich mehr rauf, selbst wenn er paulchen heissen würde! denn sicherheit wird groß geschrieben! ;)
- ich geb zu, etwas sehr themenfalsch, aber ich hoffe du weisst was ich versinnbildlichen wollte... :D
Steve1974 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.01.03 13:51 
Hallo !

Danke Dir für die Antwort.

Wenn es denn vom BDE-Admin gesperrt werden sollte, wie kann ich das ändern ? Gibt es da irgendeine Einstellung, die geändert werden muß ? Es ist übrigens _kein_ Alias für die Datenbank angelegt.

Meine XP Installation ist - hoffe ich zumindest - sauber. Festplatte wurde vorher frisch formatiert. Ich glaube auch nicht, dass es an falschen NTFS Rechten liegt, da ich ja grundsätzlich schon zugreifen kann.

Ich habe es jetzt so gelöst, dass ich nachdem ich meine DB gelöscht habe eine Dummy DB in einem anderen Ordner erstelle, und diese dann lösche, dann ist nur der andere Ordner gesperrt. Aber die Lösung nicht nicht gerade schön. :?

Da sollte es eigentlich noch eine andere Lösung geben...

Danke,

Steve.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 30.01.03 14:55 
Hallo,

in der Delphi-Hilfe steht zu Deletabel folgendes:

Zitat:

Die Methode DeleteTable löscht eine vorhandene Datenbanktabelle.

procedure DeleteTable;

Beschreibung

Mit dem Aufruf von DeleteTable kann eine Datenbanktabelle gelöscht werden, die mit der Tabellenkomponente über die Eigenschaften DatabaseName und TableName verbunden ist. Die Tabelle muß vor dem Löschen geschlossen werden.


Wird Deine Tabelle vor dem Löschen geschlossen?

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Steve1974 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.01.03 15:26 
Hallo smiegel !

ja, die wird vorher geschlossen, und lässt sich ja auch löschen. Ich glaube es wäre vielleicht besser gewesen den Code nochmal mitreinzunehmen, hier ist er:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
.
.

AWDelNam:=True;

try
    DataNeu.DatabaseName:='c:\time2\daten\'+ DbGrid1.SelectedField.Text + '\2002';
    DataNeu.TableName:=DbGrid1.SelectedField.Text + '_aw';

    DataNeu.Active:=True; // <=========== Öffnen der Tab. um zu prüfen, ob sie existiert.
    DataNeu.Active:=False; //<=========== Schliessen der Tab.
  except
    AWDelNam:=False;
  end;

  if AWDelNam then
    begin
      try
        DataNeu.DeleteTable;
      except
        AWDelDel:=False
      end;
    end;


Das DBGrid1 ist übrigens an eine andere Tabelle in einem anderen Verzeichnis gebunden. DataNeu ist eine TTable Komponente im Form, die in anderer Procedure auch zum Erstellen von neuen Tabellen genommen wird. Der obige Code wird für verschiedene Tabellen (ca. 100 Mini-Paradox-Tabellen) durchlaufen. Wenn das Verzeichnis dann komplett leer ist, also keine DBs, keine sonstigen Dateien, und keine Unterverzeichnisse sollte es mit
ausblenden Quelltext
1:
Removedir('c:\time2\daten\' + DbGrid1.SelectedField.Text + '\2002');					

gelöscht werden. Und das macht er nicht, wie oben beschrieben. Es betrifft übrigens immer nur das Verzeichnis, in dem die letzte DB gelöscht wurde, alle anderen Verzeichnisse lassen sich löschen.

Kann man vielleicht die DataNeu Komponente irdenwie zerstören ?

(mit .free, oder .destroy geht es zumindest nicht...)

Wenn ich noch irgendwelche Infos vergessen habe, kann ich die gerne auch noch nach-posten.

Danke Dir für die Antwort smiegel, wäre natürlich möglich gewesen. ;)

Gruß,

Steve.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 30.01.03 15:55 
Hallo,

ob's hilft weiss ich nicht, aber Du könntest folgendes einmal versuchen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var fn, gt:String;

  ...
  AWDelNam:=True; 

  gt:=DbGrid1.SelectedField.Text;
  fn:='c:\time2\daten\'+gt+'\2002'+'\'+gt+ '_aw'; 

  if FileExists(fn) then with DataNeu do
  try 
    DatabaseName:='c:\time2\daten\'+gt+'\2002'; 
    TableName:=gt+ '_aw';
    DeleteTable; 
  except 
    AWDelDel:=False 
  end; // try, with, if
  ...


Meine Stringbezeichner musst Du nicht übernehmen. Ich habe die nur zwecks Übersichtlichkeit eingeführt.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Steve1974 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.01.03 16:12 
Wenn ich an Deinen String fn noch .db dranhänge findet er sie und löscht sie auch. Die Dateien gibt es alle definitiv, sonst würde ich bei Table.Active = true im Debug Modus Fehler angezeigt bekommen. Das Problem wird eher sein, dass er das Verzeichnis nach dem Löschen nicht mehr loslässt (wie immer das funktioniert...)

Danke Dir,

Steve.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 30.01.03 16:38 
Hallo,

das einzige was mir jetzt noch einfällt wäre, dass Du einmal das "PrivateDir" und das "NetDir" Deiner DB-Session prüfst.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Steve1974 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.01.03 17:12 
ich muss vorab sagen, dass ich noch nie ein Session Objekt bzw. diese Einstellungen gesehen habe. Auf meinem Form habe ich jetzt eine Session Komponente gelegt, die beiden Pfade auf ein anderes, nicht betroffenes Verzeichnis gelegt, und bei der TableKomponente die SessionKompnente bei SessionName eingetragen, und die Session auf Active = true gestellt. Aber es bleibt bei dem Fehler.

Ich nehme mal an, dass es einfach ein BDE Bug ist....

Gruß,

Steve