Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   StoredProcedure über ABO aufrufen ohne das Programm blockiert (https://www.delphipraxis.net/197281-storedprocedure-ueber-abo-aufrufen-ohne-das-programm-blockiert.html)

BlueStarHH 26. Jul 2018 10:00

Datenbank: MSSQL • Version: 2012 • Zugriff über: ADO

StoredProcedure über ABO aufrufen ohne das Programm blockiert
 
Hallo,

ich nutze die ADO-Komponenten aus dem Lieferumgang von Delphi. Ich möchte per Button-Klick eine StoredProcedure aufrufen. Diese läuft mehrere Minuten. Daher soll *sofort* nach dem Klick ein Weiterabreiben im Programm möglich sein. Das Programm soll nicht blockieren. Genau das tut es bei Aufruf von ADOsp.ExecProc jedoch. Jetzt habe ich ADOsp.ExecuteOptions.eoAsyncExecute auf true gesetzt, damit es nicht mehr blockiert. Dabei gibt es jedoch folgende Exception:
Code:
Im Projekt xxxxx.exe ist eine Exception der Klasse EOleException mit der Meldung 'Der Vorgang kann nicht bearbeitet werden, während ein asynchroner Befehl ausgeführt wird' aufgetreten.
Delphi-Quellcode:
ADOsp: TADOStoredProcedure
...
ADOsp.ProcedureName := 'MyTestProc';

ADOsp.Parameters.Clear;
ADOsp.Parameters.AddParameter.Value := 123;
ADOsp.Parameters.AddParameter.Value := 'test';

ADOsp.ExecProc; //<-- Exception hier
Wie bekomme ich das gelöst? Vielen Dank im Voraus!

haentschman 26. Jul 2018 10:02

AW: StoredProcedure über ABO aufrufen ohne das Programm blockiert
 
Moin...8-)

Da hilft nur die SP in einen Thread auszulagern. :wink:

BlueStarHH 26. Jul 2018 10:05

AW: StoredProcedure über ABO aufrufen ohne das Programm blockiert
 
Zitat:

Zitat von haentschman (Beitrag 1408749)
Moin...8-)

Da hilft nur die SP in einen Thread auszulagern. :wink:

Aber wozu ist eoAsyncExecute denn da?

jobo 26. Jul 2018 10:06

AW: StoredProcedure über ABO aufrufen ohne das Programm blockiert
 
Du könntest es vielleicht in einem eigenen Thread aufrufen.

Weiß nicht, was MSSQL so kann, aber es lässt sich mindestens über den OS Scheduler ansteueren, ggF. hat es eigene Job Routinen wie Oracle.
Dort machen wir sowas je nach Bedarf auch als Job. Man startet dann per SP nicht die Nutzlast Procedure, sondern halt einen Job, der das macht. Der Aufruf kommt sofort zurück.

Vorteil ist, man erhält Logs und Monitoring Möglichkeiten geschenkt. Das ermöglicht wiederum eine nebenläufige Fortschrittsanzeige oder Benachrichtigung bei Ende, Erfolg/Fehlerkontrolel oder oder

Leider kann ich bei MSSQL nur vermuten, dass sowas ginge. Mindestens über den Taskscheduler sollte es aber möglich sein. Ggf hat der auch ein Interface "nach innen" zu MSSQL.

hoika 26. Jul 2018 10:31

AW: StoredProcedure über ABO aufrufen ohne das Programm blockiert
 
Hallo,
viell. hilft das?

https://www.experts-exchange.com/que...cute-mode.html

Ganz unten wird eine Query empfohlen mit dem genannten Parameter und Open.


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