[Delphi5] Hoe een Query te onderbreken?

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

  • Aetje
  • Registratie: September 2001
  • Laatst online: 24-03-2023

Aetje

Troubleshooting met HAMERRR

Topicstarter
Ik zit met een probleem... Ik moet een uitvoer op een database schrijven. Echter, sommige queries duren zodanig lang, dat ik de gebruiker de mogelijkheid het uitvoeren van de query te onderbreken.

Ik heb echter geen idee hoe dit te doen. De query lijkt namelijk de applicatie in zn geheel te blokkeren. Moet ik met een extra thread gaan werken, die als het nodig is de query als object opblaast (destroy of free) en opnieuw opbouwt?

HELP! :)

Forget your fears...
...and want to know more...


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Is het alleen en query, of zit er ook een loop (lus) bij ofzo?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 05-06 10:49

Varienaja

Wie dit leest is gek.

Zelfs een query in Paradox is niet te onderbreken. (Behalve sommige qbe-queries, maar die zijn onderwater op te splitsen in losse sql-statements volgens mij).

Ik denk niet dat je database-consistentie er beter van wordt als je queries killed. :P

Siditamentis astuentis pactum.


  • Aetje
  • Registratie: September 2001
  • Laatst online: 24-03-2023

Aetje

Troubleshooting met HAMERRR

Topicstarter
'T zijn alleen maar queries die uitlezen, dus da's geen punt (welja, misschien als je de unprepare vergeet maja). Dus geen manier om een half uur stampen op een andere manier dan CTRL-ALT-DEL af te sluiten? (wat eigenlijk ook een destroy betekent).

Forget your fears...
...and want to know more...


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:12
Uw queries in threads laten uitvoeren ofzo?

https://fgheysels.github.io/


Anoniem: 34694

Ik ken geen manier om een query vanuit programmatuur te onderbreken, het is echter wel zo dat sommige database system zoals ms-sql bijvoorbeeld in instelling hebben voor de maximale tijd die een query in beslag mag nemen. Voordat de query dan uitgevoerd wordt maakt de 'compiler' een schatting van de tijd die de query kost en als dat boven de ingestelde maximum waarde zit wordt hij niet uitgevoerd.

Bij paradox kan dit zeer waarschijnlijk niet maar wellicht dat er ook andere database systemen zijn die wel een dergelijke optie hebben.

  • Aetje
  • Registratie: September 2001
  • Laatst online: 24-03-2023

Aetje

Troubleshooting met HAMERRR

Topicstarter
'Tis niet Paradox, 'Tis een Titan query die op een Access database inwerkt via de Jet 3.5 of 4.0 driver.

Forget your fears...
...and want to know more...


Anoniem: 28136

ff uit mijn hoofd. Het staat me bij, dat in de demos van D5 een voorbeeldje zit van background query's. Hierin wordt getoond hoe je een query in een andere dan de main thread kunt starten.
Kweet niet of er ook "een afbreek" routine bij staat, maar dat moet m.i. niet zo moeilijk zijn om dat er bij te bouwen.

Overigens weet ik wel zeker dat je met ODBC Express een query kunt afbreken. Het query component van OE kent de property BackgroundQuery en de method AbortQuery. Maar ja OE is niet gratis!

Acties:
  • 0 Henk 'm!

  • Aetje
  • Registratie: September 2001
  • Laatst online: 24-03-2023

Aetje

Troubleshooting met HAMERRR

Topicstarter
Okee, even aangenomen dat ik hem in een andere tread kan starten (geloof ik wel)...

Hoe kan ik een tread termineren? TTread type neem ik aan? Gewoon free?

Forget your fears...
...and want to know more...


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:59

Creepy

Tactical Espionage Splatterer

Op vrijdag 15 februari 2002 06:57 schreef Aetje het volgende:
Okee, even aangenomen dat ik hem in een andere tread kan starten (geloof ik wel)...

Hoe kan ik een tread termineren? TTread type neem ik aan? Gewoon free?
Help Delphi Help -> Index -> TThread -> Methods

TThread.terminate staat daar :)
Je moet wel zelf in je code van de thread opletten of je geterminate wordt. Dus kan je alsnog pas NA een query stoppen. Je programma draait echter tegelijk met de query, dus de gebruiker hoeft in principe niet te wachten, tenzij de gebruiker alleen op de uitvoer van de query wacht natuurlijk.

Mag ik vragen wat voor gigantische query of database je gebruikt omdat het zo ontzettend lang duurt? Misschien is er in je query of database nog het 1 of ander te optimaliseren (where's, indexen, secundaire indexen?)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Aetje
  • Registratie: September 2001
  • Laatst online: 24-03-2023

Aetje

Troubleshooting met HAMERRR

Topicstarter
Vraagje... TTread.Destroy, houdt ie dan ook op met CPU tijd slurpen?

En ja, ik weet dat ik moet indexen en zo, ik heb alleen weinig over de database te vertellen. En die Titan queries schijnen "CREATE INDEX" niet te begrijpen :( :( :(

Dus vandaar deze (ietwat rigoreuze) aanpak.

Forget your fears...
...and want to know more...

Pagina: 1