AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Keine Fehlermeldung bei asynchronem Aufruf
Thema durchsuchen
Ansicht
Themen-Optionen

Keine Fehlermeldung bei asynchronem Aufruf

Ein Thema von iGoA · begonnen am 11. Okt 2010 · letzter Beitrag vom 22. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#1

Keine Fehlermeldung bei asynchronem Aufruf

  Alt 11. Okt 2010, 14:02
Datenbank: Oracle • Version: 9i • Zugriff über: ADO
Moin!

Mich plagt ein Phänomen. Wenn ich ein TADOQuery asynchron öffne, werden sämtliche Fehlermeldungen verschluckt und ich erhalte niemals Feedback, ob die Abfrage noch läuft oder gescheitert ist.
Hier mein Code:
Code:
 
    ...
    query.ExecuteOptions := [eoAsyncExecute,eoAsyncFetch,eoAsyncFetchNonBlocking];

    query.tag := 0; // sollte onFetchComplete auf 1 gesetzt werden
    query.Open;
    while (query.Tag = 0) do begin
        sleep(30);
        self.step; // hier gibt´s eine "Ich tue was"-Animation
    end;
    ...
In der While-Schleife wird eine Animation abgespielt, um dem user zu zeigen, dass das Programm gerade beschäftigt ist (darin auch ein application.processmessages). Wird das Ereignis onFetchComplete ausgelöst, wird tag auf 1 gesetzt und die Schleife bricht ab. Das funktioniert alles top, solange die Abfrage keine Fehler erzeugt. Die Schleife läuft aber unendlich weiter, wenn ein Fehler auftritt, das Programm auf keine Weise davon etwas mitbekommt und somit tag nie auf 1 gesetzt wird.

Ideen?

EDIT: Arbeite übrigens mit Delphi 2009

Geändert von iGoA (11. Okt 2010 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 11. Okt 2010, 14:08
Es gibt dort eine Eigenschaft, wo man den aktuellen Status der Abfrage Auslesen kann.

Habe aber gerade keine Möglichkeit zum Schauen

Da kann man sich auch das mit dem Tag setzen schenken

Das da meine ich http://docs.embarcadero.com/products...Set_State.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (11. Okt 2010 um 14:18 Uhr)
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#3

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 11. Okt 2010, 14:41
Danke, das ist ein guter Tipp nebenbei. Jedoch bleibt state auch bei Fehlern immer auf "fsOpening" kleben, so dass mein Problem leider weiterhin besteht.
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#4

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 12. Okt 2010, 14:35
Sonst keine Ideen?
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#5

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 11:18
Ich bin normalerweise nicht so nervig, aber ich push das Thema hiermit nochmal, weil ich dazu im Netz immernoch keine nützlichen Hinweise gefunden habe. Und das wundert mich, weil ich mir nicht vorstellen kann, dass ich der erste bin, der dieses Problem hat.
Also sorry, für´s nerven, aber vielleicht stöst so noch jemand auf diesen Thread der dazu was sagen kann.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 13:55
Da gibt es wohl keine Lösung, wenn du weiterhin mit asynchron arbeiten möchtest.

Ein andere Ansatz wäre, die Abfrage in einen Thread auszulagern. Da wird dann nicht asynchron abgefragt und trotzdem friert deine Oberfläche nicht ein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#7

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 15:03
So herum hatte ich es auch schon probiert, aber wie Du schon sagst, kann man dabei die Oberfläche nicht aktualisieren. Das ist alles sehr schade, denn die ganze Aktion sollte ja gerade dazu dienen, dem User zu zeigen, dass das Programm noch arbeitet (es werden teils sehr aufwändige und langsame Abfragen gemacht).
Aber trotzdem vielen Dank!
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 15:19
query.Open wirft keine Exception wenn die Anfrage fehlerhaft ist?
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#9

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 15:31
Genau das ist das Problem. Normalerweise wird eine Exception geworfen, aber eben leider nicht, wenn die Abfrage asynchron geöffnet wird. Wahrscheinlich verläuft sich die Exception dann irgendwo im Nebenthread und landet im Nirvana.
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Keine Fehlermeldung bei asynchronem Aufruf

  Alt 21. Okt 2010, 15:56
Ich würde die While-Schleife anders gestalten.

While (not (Query.EOF)) do
Query.EOF sollte TRUE sein, wenn die Anfrage fehlerhaft ist.
Ob das allerdings bei einem asynchronem Aufruf funktioniert, weiß ich nicht.

Dann gibt es da noch die Eigenschaft TAdoQuery.Prepared. Evtl. kann man damit etwas anfangen?

Mehr fällt mir i.M. auch nicht ein. Bleibt nur noch die Lösung von Sir Rufo.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:49 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