![]() |
Programm-Design, um DB-Abfragen zu minimieren
Hallo zusammen,
ich habe keine passende Rubrik gefunden, daher poste ich es hier. Sollte das Thema nach Meinung der MODs besser wo anders passen, bitte verschieben :-) Folgendes Problem: Ich habe einen Dienstplaner für meine Abteilung geschrieben. Meine Kollegen sollen über ein (von mir geschriebenes) Programm die Möglichkeit haben, ihre Dienstplanwünsche selbt einzutragen. Zur Speicherung der Daten steht eine Firebird-Datenbank auf meinem Server zu Hause zur Verfügung. Das Programm arbeitet auch 1a, nur würde mich interessieren wie ihr in meinem Fall die Anzahl der Datenbankabfragen auf ein Minimum beschränken würdet. An einem Tag stehen 3 verschiedene Dienste zu Auswahl. Ich habe es nun so gelöst, dass ich eine Klasse TTag erstellt habe, in welche beim Programmstart durch EINE Datenbankabfrage die bereits eingetragenen Dienste und Dienstplanwünsche aus der Datenbank eingelesen werden. Dann kann ich bequem "offline" testen, ob der ausgewählte Dienst bereits vergeben ist oder der Dienstplanwunsch schon existiert. Mit ist durchaus bewußt, dass es Probleme geben könnte, falls zwei Mitarbeiter gleichzeitig im Plan "herumhantieren", mir scheint es jedoch momentan die einzige praktikable Lösung zu sein - habe dies jedoch über den Primary-Key in der Datenbank gelöst, welcher eben Duplikate der Dienstwünsche vermeidet und einen Fehler ausgibt, welchen ich im Programm entsprechend interpretiere ("Dienst(wunsch) nicht möglich, bereits vergeben"). Würde ich jedesmal die Datenbank nach möglichen und vergebenen Diensten abfragen, nachdem der User den Tag/Dienst angeklickt hat, wäre die Geschwindigkeit über das Internet nicht mehr zumutbar (habe es selber getestet...). Oder anders (allgemein) formuliert. Wie speichert ihr die Daten einer "fernen" Datenbank im Programm, um damit zu arbeiten OHNE die Datenbank durch zusätzliche Abfragen ansprechen zu müssen. Hoffe auf einige Tipps, Michael |
AW: Programm-Design, um DB-Abfragen zu minimieren
Die Abfragen selber kannst Du nicht verhindern, aber die übertragene Datenmenge reduzieren indem Du z.b. stored procedures und views verwendest damit möglichst wenig Verarbeitung auf dem Client stattfindet.
|
AW: Programm-Design, um DB-Abfragen zu minimieren
Danke Union,
das habe ich bereits alles berücksichtigt :) Interessieren würde mich allgemein, wo mögliche Auswahllisten (z.B. Kollegen (welche Dienste können die überhaupt machen...), Wunscharten, etc.) aus der Datenbank im Programm zu speichern sind (ich habe es ja momentan über Klassen (z.B. TDienstArt, TKollege) mit entsprechenden Eigenschaften gelöst und alles in entsprechende ObjectLists gepackt... Gefüllt werden die Listen in meinem Falle beim Programmstart durch WENIGE Datenbankabfragen... Nun Frage ich mich, ob dieses Vorgehen in Ordnung ist oder ob es bessere Alternativen gibt. |
AW: Programm-Design, um DB-Abfragen zu minimieren
Ich würde mir nicht die Mühe machen solche Daten in eigenen Klassen zu speichern. Es gibt doch das Clientdataset, welches sich einfach befüllen lässt und mit Queries verbunden werden kann.
Was man noch machen könnte ist eine Webanwendung, auf die die Mitarbeiter per Browser zugreifen. Entweder mit PHP bauen, oder z.B. Raudus nehmen für Delphi, zur Zeit das einzige Webframework für Delphi was einigermaßen funktioniert. Dafür braucht man ev. eine kommerzielle Lizenz für EXTJavaScript, bitte selber prüfen. Ich habe mal ein Webinfo für unsere Kunden angefangen, bisher gehen 2 Funktionen, die Übersicht aktueller Status und der X-Bericht (Umsatzbericht). Die Übersicht wird alle 10 s aktualisiert; Zeiträume können geändert werden. War nicht viel Arbeit. Zum Ansehen: ![]() |
AW: Programm-Design, um DB-Abfragen zu minimieren
Okay, danke! ich schau mit mal TClientDataSet und Randus mal näher an :-)
Grüsse, Michael |
AW: Programm-Design, um DB-Abfragen zu minimieren
Zitat:
Falls Du eine Mehrbenutzerumgebung hast, solltest Du über Reconcile-Strategien nachdenken, bei denen etwaige Konflikte beim Speichern behandelt und gelöst werden(2 Leute ändern das gleiche, der eine löscht, der andere ändert etc.) |
AW: Programm-Design, um DB-Abfragen zu minimieren
Zitat:
Das Problem mit dem synchronen bearbeiten der Datensätze exisitert (zumindest in meiner momentanen Anwendung) nicht, da die Datensätze benutzerspezifisch geladen werden und auf die anderen Datensätze gar kein Zugriff besteht. Michael P.s.: Ich habe schon viele "Tutorials" über TClientDataset im Internet gesehen, aber irgendwie wird mir aus keinem das Prinzip (v.a. das Übertragen der Daten in das Datenset von der Datenbank) klar :-( |
AW: Programm-Design, um DB-Abfragen zu minimieren
Ich hab's noch nicht getestet, aber Firebird kann auch events (named messages) an Anwendungen schicken. ist vielleicht eine Möglichkeit
AlBo55 |
AW: Programm-Design, um DB-Abfragen zu minimieren
Mit dem Clientdataset ist es eigentlich keine Geheimwissenschaft. Wenn man Daten "readonly" anzeigen will, nimmt man eine Query-Komponente, einen DatsourceProvider, ein Clientdataset, eine DataSource und zuletzt z.B. ein DBGrid und verbindet alle Komponenten. Setzt man jetzt das Clientdatset auf Active, werden die Daten geholt.
Die Query wird dabei automatisch ausgeführt und wieder geschlossen; die Transactionskomponente muss entsprechend eingestellt werden. Read/Write ist etwas komplizierter; kann man in der Hilfe nachlesen. |
AW: Programm-Design, um DB-Abfragen zu minimieren
Zitat:
Ihr habt mir bisher sehr geholfen, Jungs!!! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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