Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UniDac MSSql Live Count (https://www.delphipraxis.net/214933-unidac-mssql-live-count.html)

DelTurbo 7. Apr 2024 11:35

Datenbank: MSSql • Version: 2019 • Zugriff über: UniDac

UniDac MSSql Live Count
 
Hi,
ich habe eine MSSql abfrage die Relativ lange dauert. Deswegen habe ich die in einen Thread gepackt. Nun warte ich natürlich im Haupt Programm bis der Thread durch ist. Ich wollte anzeigen wieviel er schon gelesen hat. Leider Zeigt RecordCount das nur am Schluss an.
Ich mache vorher ein
Code:
select Count(*) from Artikel;
Das geht ruckzuck und ich habe die Anzahl die er lesen muss. Danach starte ich den Thread.

Aber wie kann ich rausfinden wieviel er schon gelesen hat? Ich habe zugriff auf das Query, aber wie gesagt, RecordCount zeigt es erst am Schluss an.

Vielen Dank im voraus

PS.: UniDac 5.8.3

Uwe Raabe 7. Apr 2024 13:09

AW: UniDac MSSql Live Count
 
Ich denke, das wird nicht so einfach sein. Eine SQL-Query wird an den Server geschickt und der sendet dann irgendwann eine Antwort. Im Hauptthread würde das die Anwendung blockieren, was man mit der Verlagerung in einen anderen Thread umgehen kann. An dem grundsätzlichen Verhalten Request -> Answer ändert sich aber nichts. Es mag sein, dass manche Server eine Progress-Notification unterstützen, allerdings ist mir sowas im Moment nicht bekannt.

DelTurbo 7. Apr 2024 13:12

AW: UniDac MSSql Live Count
 
Hallo Uwe,
ich danke dir für die Antwort. Dann kommt halt nur eine "Moment Box" in frage. Ich suche schon länger danach. Aber das kann ich wohl nun bleiben lassen.

Vielen Dank.

Olli73 7. Apr 2024 14:36

AW: UniDac MSSql Live Count
 
In TUniQuery (& Co) von UniDAC gibt es eine Property "nonblocking". Dann brauchst du nicht selber einen Thread zu erstellen und es wird bei jedem Fetch das Event "BeforeFetch" aufgerufen.

Das dürfte dir aber auch nur was bringen, wenn nicht die Abfrage an sich lange dauert, sondern das Fetchen und dies in Blöcken geschieht.

Aber bei deiner Asbach-Version kann es gut sein, dass es das noch nicht gibt.

Du könntest natürlich auch selbst probieren, in deinem Thread immer Blöcke abzurufen und dabei die Oberfläche zu aktualisieren. Wenn aber, wie gesagt, der Server lange braucht, bis er die Daten aufbereitet hat, bringt das alles dir nix.

Edit: Hast du auch deiner Query im Thread eine eigene Connection gegönnt?

DelTurbo 7. Apr 2024 14:41

AW: UniDac MSSql Live Count
 
Da hast du wohl den Finger auf die Wunde gelegt. Eine Abfrage Groupt Diverse Sachen. Da ist der wirklich weg. Dabei würde es mir wohl nix bringen. Trotzdem schau ich mal. Nun hast du mich neugierig gemacht...

Zitat:

Zitat von Olli73 (Beitrag 1535457)
Edit: Hast du auch deiner Query im Thread eine eigene Connection gegönnt?

Ja klar.

Olli73 7. Apr 2024 14:43

AW: UniDac MSSql Live Count
 
Hast du auch mein Edit gesehen?

"Edit: Hast du auch deiner Query im Thread eine eigene Connection gegönnt?"

Sorry zu spät gesehen


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