AGB  ·  Datenschutz  ·  Impressum  







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

Datenbankabfrage abbrechen

Offene Frage von "Maa83"
Ein Thema von Maa83 · begonnen am 24. Mai 2006 · letzter Beitrag vom 24. Mai 2006
Antwort Antwort
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#1

Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 10:19
Hallo,

ich möchte eine Datenbanksuche starten. Das Ganze mache ich mit einer TADOQuery.
Ich sage also ado_tmp.Open; Er fängt an zu suchen und sucht und sucht und sucht.
Irgendwann wird mir das zu blöd weil es zu lange dauert und ich möchte die Suche abbrechen.
Wie kann ich das machen? Thread-Programmierung?

Ich hoffe ihr könnt mir ein paar Tipps geben.

Gruß
Martin
Martin
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 10:28
Hallo,

kann es gerade nicht testen, aber hast Du es mal mit der Cancel-Methode probiert?
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 10:36
Das Problem ist das ich während des .Open; nicht auf einen Button oder ähnliches Zugreifen kann. Somit kann ich auch keine Prozedur aufrufen die das .Cancel enthält.
Martin
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#4

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 10:55
Hallo!

Unterbrechen kannst Du nach jedem gefundenen Datensatz im OnFetchProgress-Event der ADO-Query.

Wenn DU schon vor Erscheinen des ersten Ergebnissatzes lange warten mußt, so solltest Du Deine Abfrage bzw. Daein Datenbankdesign überdenken.
Evtl. fehlen Dir dann nur ein paar Indizes.
Poste doch mal ein Beispiel.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 10:56
Schau Dir mal die Open-Methode vom TAdoQuery an - vielleicht kannst Du da an geeigneter Stelle ein Application.ProcessMessages einbauen. Wenn ich mich nicht irre, hat das ein Kollege von mir schonmal für ein TADSQuery gemacht.
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 12:52
also, ich hab jetzt folgende Dinge entdeckt und dabei leider nichts ergiebiges herausgefunden:

Es gibt bei der ADOQuery die Eigenschaft ExecuteOptions. Diese kann ich auf "eoAsyncExecute" stellen. Das hat zur Folge das ich während des Öffnens der Query andere Dinge tun kann --> also genau das was ich möchte. Aber das NOCDBGrid zeigt dann nur einen Datensatz an obwohl das Grid noch viel Platz hätte. Ich kann dann auch einzeln durch die Datensätze durchgehen. Ich bräuchte hier die Möglichkeit das das Grid wieder alle Datensätze ganz normal anzeigt. Die Ereignisse "OnFetchComplete" und "OnFetchProgress" werden nicht aufgerufen.

Als zweites hab ich die Eigenschaft ExecuteOptions auf "eoAsyncFetch" gestellt. Das hat zur Folge das ich keine Möglichkeit habe während der Verarbeitung zu agieren. Das Ereigniss "OnFetchProgress" wird nur ein einziges Mal und zwar ganz am Schluß aufgerufen, gefolgt von "OnFetchComplete". Würde das Ereigniss "OnFetchProgress" öfter auftreten, so wie in der Hilfe beschrieben wär mein Problem auch gelöst.

In die AdoQuery selber möchte ich eigentlich nicht eingreifen da es sich hier um ein sehr großes Produkt handelt. Wenn ich die AdoQuery ändern würde, würde sich das durch das ganze Programm ziehen.

Bitte helft mir

Gruß
Martin
Martin
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Datenbankabfrage abbrechen

  Alt 24. Mai 2006, 13:36
Ich schätze, Dein erster Gedanke war nicht schlecht: Thread-Programmierung. So kannst Du den Thread mit der Abfrage über einen zweiten Thread "killen". Das Problem ist nur folgendes: Sobald Du TADOQuery.Select mit Open abgesetzt hast, musst Du irgendeinen Zugang zum Server finden, denn dort wird Dein Statement abgearbeitet.
Der von Dir eingesetzte Server sollte also irgenwie von sich aus eine Möglichkeit bieten eine Select-Abfrage abzubrechen, ansonsten sieht's düster aus.

Wenn Du mit einer lokalen DB arbeitest, könntest könntest Du einfach den Lokalen Abfrage-Thread "killen", notfalls über einen eigenen Button ausgelöst.
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  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 13:17 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