Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TTable Datei löschen (https://www.delphipraxis.net/18591-ttable-datei-loeschen.html)

glunzl 21. Mär 2004 17:44


TTable Datei löschen
 
Hallo Leutz!

Ich erstelle mit dem FormCreate Ereignis eine Datei, die ich anschliessend an eine TTable-Komponente binde. Active wird danach auf True gesetzt.
Beim Ereignis FormClose möchte ich diese Datei wieder löschen. Dazu setze ich Active auf False, aber löschen lässt sich die Datei dann nicht. Was muss denn noch erfüllt sein, damit ich die Datei löschen kann?

Danke für Eure Tipps!

Michael

MrSpock 21. Mär 2004 21:33

Re: TTable Datei löschen
 
Hallo glunzl,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Nun zu deiner Frage: Eigentlich sollte das Schließen der Tabelle ausreichen, um die zugrundeliegende Datei löschen zu können. Versuche vielleicht mal ChachedUpdate auf False zu setzen, damit nicht mit Zwischenspeichern gearbeitet wird.

Robert_G 21. Mär 2004 21:35

Re: TTable Datei löschen
 
Mit dem BDE-Krempel kenne ich mich überhaupt nich aus, aber eine Gegenfrage habe ich da:
Warum eine Tabelle erstellen um sie beim Schließen wieder zu löschen?

grayfox 21. Mär 2004 22:02

Re: TTable Datei löschen
 
hallo mr spock!

Zitat:

Eigentlich sollte das Schließen der Tabelle ausreichen, um die zugrundeliegende Datei löschen zu können.
das wäre aber ganz tragisch, wenn beim schliessen des tables die dahinterliegende tabelle gelöscht würde. furchtbar, nicht auszudenken.
aber gott sei dank tut sie das ohnehin nicht so leichtfertig, ausser man experimentiert mit 'deletetable' :mrgreen:

mfg, stefan

grayfox 21. Mär 2004 22:07

Re: TTable Datei löschen
 
hallo glunzl!

also normalerweise löscht man tabellen nicht beim beenden des programmes, ausser es handelt sich um temporäre tabellen.
zieh dir eine TTable-komponente auf die IDE, markiere sie und drück auf F1. unter den methoden des tables wirst du ausdrücke wie DeleteTable oder EmptyTable finden. und eines der beiden passt für dein vorhaben.

mfg, stefan

MrSpock 21. Mär 2004 22:18

Re: TTable Datei löschen
 
Hallo grayfox,

:shock: da hab ich mich wohl falsch ausgedrückt. Ich meinte, dass das Schließen der Tabelle diese frei gibt, sodass sie anschließend gelöscht werden kann. Natürlich wird sie nicht automatisch gelöscht :stupid: .

glunzl 22. Mär 2004 09:19

Re: TTable Datei löschen
 
@ MrSpock: Danke für's Willkommen :-)

@all: Die Tabelle wird als tempöräre Tabelle/Datei genutzt. In diese sollen Inhalte aus andere Tabellen eingefügt werden, um diese dann auszuwerten.
Z.Z. sieht das so aus:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
begin
   // ... erzeugen der der Temp-Datei ...

  Try
    Table_Temp.DatabaseName := GetTempFolder ;
    Table_Temp.TableName   := 'VA_TEMP.dbf' ;
    Table_Temp.Active := True ;
  Except Application.MessageBox('Die temp. Tabelle konnte nicht an die temp. Datei gebunden werden', 'Visuanalyse', 48) ;
  End ;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Löschen der Temp Datei
  Table_Temp.Active := False ;
  Table_Temp.DeleteTable ;
  If FileExists(GetTempFolder + 'VA_TEMP.dbf')
    Then If not DeleteFile(GetTempFolder + 'VA_TEMP.dbf') // TempDatei löschen
           Then Application.MessageBox('Die temporäre Datei konnte nicht gelöscht werden.' , 'Visuanalyse', 48) ;
Bei Table_Temp.DeleteTable tritt dann eine Exception der Klasse EDBEngineError, Meldung "Ungültiger Dateiname" auf.
Wenn ich die Zeile Table_Temp.DeleteTable rausnehme, erscheint halt meine MessageBox, das die Datei nicht gelöscht werden konnte.
Wenn ich Table_Temp.DeleteTable durch Table_Temp.EmptyTable ersetze, tritt an der Stelle eine Exception der Klasse EDBEngineError, Meldung "Ungültiger Parameter" auf.

Nach meinem Verständniss, müsste ich doch nur die "Verbindung" von der Tabelle zur Datei lösen und könnte sie dann löchen. Aber scheinbar langt Table_Temp.Active := False ; nicht.

Kann mir noch jemand weiterhelfen?

Gruss
Michael

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

glunzl 22. Mär 2004 09:22

Re: TTable Datei löschen
 
@Sharky: Danke! Wieder was gelernt ...

Michael

Sharky 22. Mär 2004 09:29

Re: TTable Datei löschen
 
Hai glunzl,

ich vermisse bei deinem Code ein .CreateTable. Wenn die Tabelle nur temporär vorhanden ist musst Du sie doch auch irgendwann erzeugen.

glunzl 22. Mär 2004 09:46

Re: TTable Datei löschen
 
@Sharky: Ich habe mir eine TTable-Komponennte auf meine Form gezogen. Muss sie dann nicht nur im Objektinspektor eingestellt werden? Zur Laufzeit stelle ich dann die andreren Eigenschaften ein.

Die Datei wird ja angelegt, sehe ich ja. Nur das löschen will nicht ...

Michael

Sharky 22. Mär 2004 09:53

Re: TTable Datei löschen
 
Du hast doch eine Datenbank in der deine Temp-Tabelle liegen soll. Diese Tabelle (nicht das TTable) muss doch erst in der Datenbank erzeugt werden.

Beim start deines Programmes:
Datenbank -> tmp_DB
Tabellen -> keine

Jetzt musst Du erst eine tmp_table erzeugen.

glunzl 22. Mär 2004 11:27

Re: TTable Datei löschen
 
Danke, werde ich gleich mal in Angriff nehmen. (Wäre wohl beim kopieren der Datensätze aufgefallen :-))
Aber hat das erzeugen der Tabelle auch damit zu tun, das ich die Datei nicht löschen kann?

Michael

Sharky 22. Mär 2004 11:34

Re: TTable Datei löschen
 
Zitat:

Zitat von glunzl
...Aber hat das erzeugen der Tabelle auch damit zu tun, das ich die Datei nicht löschen kann?..

Ich denke mal das die Datenbank meckert wenn Du versuchst etwas zu löschen das es nicht gibt ;-)

KarstenW 22. Mär 2004 18:15

Re: TTable Datei löschen
 
Wenn ich mir den Sourcecode so anschau, dann wird doch eine einsame DBF-Tabelle erzeugt.
Also nix mit Datenbank.
Hab das ganze mal nachvollzogen:

Code:
procedure TForm1.FormCreate(Sender: TObject);
var
begin
   // ... erzeugen der der Temp-Datei als DBase-Tabelle,

    Table1.DatabaseName := 'C:\temp' ;
    Table1.TableName   := 'VA_TEMP.dbf' ;
    Table1.Active := True ;

   // Table2.Open;
   // While NOT Table2.EOF;
   // die Tabelle1 mit Tabelle2 füllen

end ;

  // die Tabelle ist da

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Löschen der Temp Datei
  Table1.Active := False ;
  Table1.DeleteTable ;
und die Tabelle ist gelöscht.

Also entweder lauft das bei dir anders oder ich versteh das nicht.
:freak:
Was ich beim Test NICHT benutzt hatte war ein INDEX ! Habs jetzt auch nicht mehr probiert.
Liegt da der Hund begraben ?

Karsten

glunzl 23. Mär 2004 10:52

Re: TTable Datei löschen
 
Nachdem ich jetzt die Tabelle mit allen Feldern und .CreateTable erzeuge funzt alles einwandfrei.
Vorher habe ich wohl nur die Datei erzeugt, aber nicht die Tabelle.

Dank an alle!

Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz