Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery - Tabelle wird nicht geschlossen (https://www.delphipraxis.net/26796-tquery-tabelle-wird-nicht-geschlossen.html)

mandumoal 29. Jul 2004 14:40


TQuery - Tabelle wird nicht geschlossen
 
Hallo!

Ich arbeite mit einem TAdsQuery [local] und versuche krampfhaft die geöffnete Tabelle wieder so "freizugeben", dass ich sie mittels DeleteFile löschen kann.

Ich habe schon alles? versucht:
Delphi-Quellcode:
Query.Close;
Query.Active := False;
AdsConnection.Disconnect;
aber er will einfach nicht gehen. Ich bekomme immer einen Fehler bei DeleteFile - Datei wird von einem anderen Programm benutzt...

Auch mit dem Öffnen einer anderen Tabelle
Delphi-Quellcode:
Query.SQL.Text := 'SELECT * FROM AndereTabelle'
konnte ich nichts anrichten, und bei
Delphi-Quellcode:
Query.DeleteTable;
beschwert er sich, ich hätte nicht die Rechte das zu machen.

Wie kann ich also dem Query beibringen, es soll gefälligst die Tabelle loslassen?

mfg mandumoal

Memo 29. Jul 2004 14:56

Re: TQuery - Tabelle wird nicht geschlossen
 
Zitat:

Zitat von mandumoal
Datei wird von einem anderen Programm benutzt...

Evt. von dir selber? Hast du die Query schonmal im OI deaktiviert?

mandumoal 29. Jul 2004 15:06

Re: TQuery - Tabelle wird nicht geschlossen
 
Ne, kann nicht sein, die Tabelle wird erst zur Laufzeit erstellt und auch von keinem anderen Query/Table verwendet.
-> im OI ist sie niemals Active

:roll:

mandumoal 29. Jul 2004 18:15

Re: TQuery - Tabelle wird nicht geschlossen
 
Könnte vielleicht mal jemand das was ich beschrieben habe ausprobieren?
Das wäre super!

Man muss im Prinzip nur eine Datenbank mit einem Query öffnen:
Delphi-Quellcode:
Query.SQL.Text := 'SELECT * FROM "' + NamederTabelle + '"';
Query.ExecSQL;
Query.Active := False;
if DeleteFile(NamederTabelle) then ShowMessage('Gelöscht') else ShowMessage('Noch da');
Das wäre es schon.
Wär sehr nett wenn es jemand ausprobieren könnte :P

(Oder natürlich einfach die Lösung hier posten :stupid: , also wie ich die Tabelle wieder frei kriege)

mfg mandumoal

Union 31. Jul 2004 13:30

Re: TQuery - Tabelle wird nicht geschlossen
 
Zitat:

Zitat von mandumoal
Hallo!
Ich arbeite mit einem TAdsQuery [local] und versuche krampfhaft die geöffnete Tabelle wieder so "freizugeben", dass ich sie mittels DeleteFile löschen kann.
aber er will einfach nicht gehen. Ich bekomme immer einen Fehler bei DeleteFile - Datei wird von einem anderen Programm benutzt...
Wie kann ich also dem Query beibringen, es soll gefälligst die Tabelle loslassen?

Du musst das nicht dem Query, sondern dem ADS beibringen, denn der cached die Tabellen noch einige Zeit:

Delphi-Quellcode:
// Einbinden ADS Low-Level
uses ace;

// Alle Tabellen auf jeden Fall schliessen
Ace.AdsCacheopenCursors(0);
AdsConnection.CloseCachedTables;
AdsConnection.IsConnected := false;
// Wieder auf den im Treiber definierten Standardwert setzen
Ace.AdsCacheopenCursors(25);
Das schliesst aber alle Tabellen durch das IsConnected := false. Es gibt alternativ noch die Möglichkeit über SQL:
Delphi-Quellcode:
SQL.Clear;
SQL.Add('drop table '+sTableName);
try
   ExecSQL;
except
end;

Robert_G 1. Aug 2004 22:11

Re: TQuery - Tabelle wird nicht geschlossen
 
Zitat:

Zitat von Union
Es gibt alternativ noch die Möglichkeit über SQL:
Delphi-Quellcode:
SQL.Clear;
SQL.Add('drop table '+sTableName);
try
   ExecSQL;
except
end;

Das dürfte dann nicht nur auf dem "großen Bruder" des ALS laufen, sondern auch auf allen anderen DBs.

Besser als das brachiale Löschen von Dateien ist es auf jeden Fall. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 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