Einzelnen Beitrag anzeigen

Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#1

Ansatz gesucht: Triggern einer Benachrichtigung im Kontext von zykl. Dateiabfragen...

  Alt 2. Nov 2011, 10:00
Genereller Ansatz gesucht:
Triggern einer Benachrichtigung im Kontext von zyklischen Dateiabfragen kombiniert mit Datenbankzugriff
(Delphi 2009, Datenbank: Firebird 2.5.1 mit UniDac)

Tag Gemeinde,
sorry erstmal für die Prosa, aber wie die Überschrift schon sagt, ist die Situation etwas komplizierter ...

Ich habe für mehrere Clients jeweils eine CSV-Datei mit einer Liste von Meldungen, die ständig aktualisiert werden.
(Dass diese Konstellation an sich schon mal ungeschickt ist weiß ich, das steht aber (leider) momentan nicht zur Disposition)
Jede Meldung besteht aus mehreren Strings und Integern. (StringLists fallen als Container also aus)

1. Die Dateien sollen eingelesen und mit einer Definitionstabelle aus der lokalen Datenbank kombiniert werden. (Edit: Meldungen die nicht mehr in den Dateien auftreten, sollen auch nicht mehr angezeigt werden.)
2. Die aktuellen kombinierten Daten sollen sowohl für jedes Gerät einzeln als auch zusammen angezeigt werden können.
3. Bei einem neuen Eintrag mit gewisser Priorität soll eine Benachrichtigung ausgelöst werden.
Die Einträge lassen sich über den Meldungscode nebst Zeitstempel eindeutig zuordnen.

Das Problem besteht nun darin, wie man diese Kombination möglichst performant hinbekommt.

Momentan besteht eine Lösung, bei der die kombinierten Daten EINES Clients angezeigt werden können.
Das Ganze jedoch ohne Benachrichtigung und ohne Möglichkeit der Anzeige aller Clients.
Hierzu werden ALLE Dateien zyklisch in Stringgrids gelesen und dort die Felder überprüft.
Sollen die Daten eines Clients angezeigt werden, werden die ausgelesenen Daten aus dem jeweiligen StringGrid in eine Datenbanktabelle geschrieben,
dann per SQL mit der Definitionstabelle verknüpft und in ein DBGrid ausgegeben. Das Ganze ebenfalls zyklisch.
Performance-technisch ein Albtraum, da permanent in die Datenbank geschrieben wird.
Zudem kann eben immer nur ein Client angezeigt werden.

Wie könnte man das angehen?
Zyklisches Einlesen der Dateien in StringGrids (oder Arrays) ist denke ich nicht so dumm,
zum Feststellen von Änderungen ein zweiter Satz Arrays, in welche die alten Daten vor dem nächsten Zyklus geschoben werden.
Ob zu einer Meldung bereits eine Benachrichtigung gesendet wurde, könnte dann in einem zusätzlichen Feld des Arrays abgelegt werden,
muss aber bei jeder Aktualisierung beim Vergleich der Arrays nachgezogen werden.

Nun müssen die Arrays noch mit den Daten der Definitionstabelle aus der lokalen Datenbank verknüpft werden,
(Temporäre Tabelle, oder Datenbanktabelle dauerhaft auslesen !?!)
und diese verknüpften Daten für jeden Client einzeln als auch für Alle zusammen abgerufen werden.
Die Benachrichtigung soll ebenfalls die kombinierten Daten enthalten.

Ich bin für jeden Vorschlag und Ansatz dankbar.
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay

Geändert von alphaflight83 ( 2. Nov 2011 um 13:31 Uhr) Grund: Edit in Punkt 1
  Mit Zitat antworten Zitat