Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankabfrage visualisieren (Firebird) (https://www.delphipraxis.net/109627-datenbankabfrage-visualisieren-firebird.html)

Haeger23 4. Mär 2008 19:48

Datenbank: Firebird • Version: 2.0 • Zugriff über: ZEOS

Datenbankabfrage visualisieren (Firebird)
 
Hi,

also ich habe ein Problem meine Datenbankabfragen zu visualisieren, bisher ist es so, dass das Programm einfach für die Dauer der Abfrage nicht mehr ansprechbar ist. Ich möchte dem Benutzer aber am liebsten zeigen wie lange es noch dauern wird oder zumindest zeigen das überhaupt etwas passiert.

Ich habe schon was von Callback-Funktionen der Datenbank gelesen. Das bringt mich mit Firebird allerdings nicht weiter, ich glaube sowas gibt es unter Firebird gar nicht?!
Auch habe ich mir überlegt könnte man ein extra Fenster verwenden, welches in einem eigenen Thread läuft und in dem ein Progressbar stetig hoch und runter läuft. Ist doch aber irgendwie auch nix Ganzes oder?

Jetzt wollte ich gern mal fragen wie man denn sowas am besten löst?

Mit freundlichem Gruß
der Haeger

mkinzler 4. Mär 2008 20:22

Re: Datenbankabfrage visualisieren (Firebird)
 
FireBird unterstützt aber Events.

Haeger23 4. Mär 2008 21:30

Re: Datenbankabfrage visualisieren (Firebird)
 
Kann ich die nutzen um mir während z.B. einer Select-Abfrage eine Rückmeldung an meine Delphi-Anwendung zugeben,
z.B. wieviele Datensätze bis dato gefunden wurden?

Mir wäre ein Alive-Signal schon genug eigentlich :) ... kannst du das evtl. ein wenig für mich ausführen? Ist Neuland.

Danke dir

omata 4. Mär 2008 21:50

Re: Datenbankabfrage visualisieren (Firebird)
 
Nein, das was du möchtest geht leider nicht.

Du kannst nicht ermitteln wie weit die Datenbank mit der Verarbeitung ist und wie lange sie noch benötigt.

Is nich...

mkinzler 4. Mär 2008 21:54

Re: Datenbankabfrage visualisieren (Firebird)
 
Innerhalb einer einfachen Abfrage wohl nicht, dort sollte so etwas auch nicht notwendig sein
http://support.codegear.com/tw/article/34722
http://www.sinter.com.tw/borland/int.../ib_events.pdf

Haeger23 4. Mär 2008 22:31

Re: Datenbankabfrage visualisieren (Firebird)
 
Ok schon mal danke für eure Antworten. Ich kann also nicht zwischen ein Select-Statement kommen um den User zu informieren, dass etwas passiert. Die Frage ist aber nun, wie handled ihr das?

Lasst ihr den User im Ungewissen ob die Anwendung abgestürzt ist oder nicht?
Kann man so eine Abfrage vielleicht besser in einem Thread starten und nebenbei visuell eine Rückmeldung geben,
dass gerade die Datenbank abgefragt wird? Wenn ja gibt es da nen guten Tipp ein Tutorial?

Wie wird sowas im allgemeinen gehandhabt?

Grüße

Jelly 4. Mär 2008 22:52

Re: Datenbankabfrage visualisieren (Firebird)
 
Wie gross ist denn deine Datenbank... Vielleicht kann man ja auch noch was am SQL Statement tunen.

Wenns wirklich lang dauert, kann man die Query schon in einen getrennten Thread auslagern. Aber schneller wirds dadurch natürlich nicht, nur friert eben die Anwendung nicht ein. Du solltest dem Thread jedoch unbedingt eine eigene Connection spendieren.

Haeger23 5. Mär 2008 07:28

Re: Datenbankabfrage visualisieren (Firebird)
 
Also die Datenbank ist ca. 3 GB groß und der Großteil der Daten liegt auch in einer Entität.
Sind halt recht simple Daten (Die Datenbank ist normalisiert ;)).

Habe für diese spezielle Abfrage, da die recht häufig verwendet wird jetzt einen Index auf das Feld gelegt. Die Geschwindigkeit ist dadurch annehmbar.

Was ich aus dieser Diskussion jetzt mitnehme, ist:

- Wenn meine Select-Statements so lange Dauern, dass der Benutzer stutzig werden könnte, sollte ich diese optimieren. Denn in Firebird komme ich leider nach dem Abschicken des Statements und der Rückgabe der Daten nicht mehr dazwischen, um z.B. einen
Progressbar zu aktualisieren.
- Ist dies doch gefordert kann man auf Threads ausweichen, diese bringt allerdings nur dem User was, keine Performancesteigerung.


Habe ich was falsch verstanden oder vergessen? Bitte korrigiert mich ;).

Gruß
Haeger

RavenIV 5. Mär 2008 07:53

Re: Datenbankabfrage visualisieren (Firebird)
 
Zitat:

Zitat von Haeger23
Habe ich was falsch verstanden oder vergessen? Bitte korrigiert mich ;).

Vollkommen richtig.
SELECT irgendwas FROM irgendwo - auf Ergebnis warten und dabei Sanduhr oder Progressbar oder "Livebar" anzeigen - Ergebnis bekommen - Ergebnis verarbeiten - Ergebnis anzeigen.

Aber wenn eine Abfrage soooo lange dauert, dann ist bestimmt was faul.
Entweder ist die DB nicht passend aufgebaut, es fehlen Indexe, oder die Abfrage ist falsch aufgebaut.

mquadrat 5. Mär 2008 07:55

Re: Datenbankabfrage visualisieren (Firebird)
 
Soweit haste das richtig verstanden. Dass ein zusätzlicher Thread keinen Performancegewinn gibt liegt ja auf der Hand. Schließlich interessiert den Datenbankserver nicht wirklich, wieviele Threads du auf der lokalen Arbeitsstation aufmachst.

@Raven
Das würde ich pauschal nicht so sagen. Schließlich gibt es beispielsweise Data-Mining Abfragen, die extrem lang dauern (z.B. Statistiken, die für jede Warengruppe die Jahresumsätze im Vergleich zum Vorjahr gesplittet auf die Kundengruppen ausgeben). Da kann man auch mit Indizes irgendwann nichts mehr machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.
Seite 1 von 2  1 2      

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