![]() |
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 |
Re: Datenbankabfrage visualisieren (Firebird)
FireBird unterstützt aber Events.
|
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 |
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... |
Re: Datenbankabfrage visualisieren (Firebird)
Innerhalb einer einfachen Abfrage wohl nicht, dort sollte so etwas auch nicht notwendig sein
![]() ![]() |
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 |
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. |
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 |
Re: Datenbankabfrage visualisieren (Firebird)
Zitat:
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. |
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 03:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz