AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Query abbrechen

Ein Thema von Jacki O · begonnen am 7. Jan 2004 · letzter Beitrag vom 8. Jan 2004
Antwort Antwort
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#1

Query abbrechen

  Alt 7. Jan 2004, 11:10
Hallo,

ich habe follgendes Problem:
Ich lasse eine Query ein SQL-Statemant ausführen, dies dauert seine Zeit.
Nun möchte ich diese Ausführung abbrechen. Aber wie ?
Einfach nur close hat nicht hin.

Gruß Jacki
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Query abbrechen

  Alt 7. Jan 2004, 11:19
Das könnte ein Hinweis darauf sein, daß die Query falsch aufgebaut ist. Wenn etwas abgebrochen werden soll, so braucht man meist nicht erst damit anzufangen. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Query abbrechen

  Alt 7. Jan 2004, 11:54
Hallo,

um ein SQL-Statement zu Stoppen musst du erstmal die Query in einem eigenen Thread starten, was aber wieder andere Probleme mit sich bringen wird.
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#4

Re: Query abbrechen

  Alt 7. Jan 2004, 19:40
Hallo,

Zitat:
um ein SQL-Statement zu Stoppen musst du erstmal die Query in einem eigenen Thread starten
Genau das tue ich. Ich habe follgendes SQL-Statement:
SQL-Code:
select * from MyTable t1
   where t1."date" >= '2004/01/07 00:00:00
   and t1."date" < '2004/01/07 01:00:00'
Die Query ist wie gesagt in einem eigenen Thread, damit das Programm bedienbar bleibt.
Ausgeführt wird durch :Query.Open; Wenn der User sich nun geirrt hat und Abbrechen will, muß er z.Zt. so lange warten, bis die
Ergebnissmenge vorliegt. Bei 400.000 Datensätzen dauert das ein wenig länger.
Ich arbeite mit einer TQuery-, einer TSession- und TDatabase-Komponente.

Gruß Jacki
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Query abbrechen

  Alt 7. Jan 2004, 22:34
Mit Query.Open wird kein extra Thread gestartet.
Deine Anwendung macht natürlich garnix während die Abfrage läuft.
Wenn du dich mit Threads auseinandersetzen willst, kann ich dir nur Luckies Thread-Tut empfehlen.
  Mit Zitat antworten Zitat
Jacki O

Registriert seit: 19. Okt 2003
73 Beiträge
 
#6

Re: Query abbrechen

  Alt 7. Jan 2004, 23:04
Hi,

in einem Thread wird die Query mit Create erzeugt, genau wie die anderen Datenbank - Komponenten auch.
In der Execute Methode des Threads wird das SQL Statement geladen und ausgeführt, damit die Anwendung
weiter bedienbar bleibt. Ich hatte gehofft, das man so etws wie ein disconnect machen köntte.

Sorry, wenn ich mich missverständlich ausgedrückt hatte.

Gruß Jacki
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Query abbrechen

  Alt 7. Jan 2004, 23:26
Also ich verwende für DB-Zugriffe Direct Oracle Access.
Bei diesem Package besitzt die TOracleQuery-Kompo die Möglichkeit, die Abfrage in einem seperatem Thread ablaufen zu lassen.
Wenn du auch dieses Package nutzt, dann kannst mit Query.BreakThread den Thread beenden.
Mit den Standardkomponenten von Delphi ist das nicht möglich (kein integrierter Thread), da deine Anwendung ja nur einen Programmablauf hat.

[Edit]
Habe ich dich jetzt richtig verstanden, dass du einen Thread anlegst in dem deine Query ausgeführt wird.
[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: Query abbrechen

  Alt 8. Jan 2004, 00:09
Hatten wir schonmal, hier zu finden.
Im Anhang dort findest Du einen Ansatz...
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Query abbrechen

  Alt 8. Jan 2004, 11:03
Könntest Du nicht den Thread mit einer Eigenschaft FreeOnReady ertstellen, so dass der Thread freigegeben wird, wenn er sich beendet (Execute ist durchlaufen), was exakt dem Verhalten von FreeOnTerminate entspricht, darüber hinaus aber den Thread auch sofort freigibt, falls er bereits durchlaufen ist?
Also etwas der Art
Delphi-Quellcode:
myThread.WaitFor;
// Query is ready
DoSthWithResult(myThread);
myThread.FreeOnReady:= True; // implicit call of myThread.Free
// always set freed reference to nil ;)
myThread:= nil;
Auf diese Weise könntest Du im Fall eines Abbruchs, den laufen Thread einfach "vergessen" und sofort einen neuen starten:
Delphi-Quellcode:
// "forget" or free current query
myQueryThread.FreeOnReady;
// create new query thread
myQueryThread:= TQueryThread.Create(AQueryString);
gruß, choose
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 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