LabVIEWForum.de
Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? (/Thread-Kann-man-Wertaenderung-in-Datenbank-ereignisgesteuert-erfassen)



Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - derandyk - 08.06.2020 06:21

Hallo Leute,

ich hätte mal eine Frage bezüglich der Erfassung einer Wertänderung in einer SQL Datenbank:

Hintergrund: Ich würde gerne eine LabView Programm Aktion auslösen, sobald es eine Änderung in einem bestimmten Feld in einer SQL Datenbank gibt.

Klar könnte ich den klassischen Weg wählen und in regelmäßigen Abständen den Datenbankwert abfragen.
Beim Nachdenken darüber dachte ich mir jedoch, dass so etwas eigentlich viel eleganter ereignisgesteuert funktionieren könnte.

Deswegen meine Frage: Gibt es eine Möglichkeit in LabView ein dynamisches Ereignis zu generieren, welches bei Änderung eines Datenbankwertes zündet und ich dann mittels Event Struktur verarbeiten kann?

Vielen Dank für Eure Ideen im Voraus.

Andy


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - MScz - 08.06.2020 07:26

Hallo Andy,

eine Möglichkeit für diese Events kenne ich jetzt nicht.
Es gibt aber Trigger/Events selber in der Datenbank, die das können. Vll. ist das ja der richtige/bessere Weg für dich?

https://www.sqlservertutorial.net/sql-server-triggers/sql-server-create-trigger/

Gruß Max


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - derandyk - 09.06.2020 13:02

Hallo Max,

danke für Deine Antwort.

Das mit den SQL Triggern hatte ich auch gelesen. Jedoch erzeugt man nach meinem Verständnis nur Datenbank-interne Ereignisse.
Letztlich muss ja aber meine LabView/Windows Applikation davon Wind bekommen.

So wie es aussieht muss ich wohl kontinuierlich abfragen.

Oder fällt jemandem noch ein anderer Geheimtrick ein?

Viele Grüße und Danke im Voraus!

Andy


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - 83Daniel - 09.06.2020 14:53

Ich hatte mal ein ähnliches Problem.

Als Lösung habe ich dann einen ein Byte Wert der SQL Datenbank mit einem Trigger erhöht und diesen kontinuierlich Abgefragt.


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - th13 - 09.06.2020 15:12

(09.06.2020 13:02 )derandyk schrieb:  Jedoch erzeugt man nach meinem Verständnis nur Datenbank-interne Ereignisse.
Ja.

Jedoch erlauben einige Datenbanken das Ausführen externer Programme auch in den Triggern (Beispiel für MS SQL). Du könntest also ein kleines Programm schreiben, dass deine Applikation über die Änderung informiert, z.B. via Networkstreams.


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - derandyk - 14.07.2020 09:15

Hallo th13,

der Hinweis ist sehr cool. Danke für den konstruktiven Vorschlag! Das kommt meiner Vorstellung schon näher.

Allerdings sehe ich noch Problemchen, wenn der Datenbankserver nicht auf meinem Rechner läuft sondern irgendwo gehostet ist:
Ich fürchte, dann muss ich dafür sorgen, dass entsprechende Runtime Engines (z.B. von LabView) auf dem Datenbankserver installiert sind.
Ob das immer möglich ist, wage ich zu bezweifeln.

Gibt es unter Umständen eine Möglichkeit so einen Trigger mit ActiveX oder .NET Methoden zu verknüpfen um vielleicht mit Callbacks zu arbeiten?

Viele Grüße

Andy


RE: Kann man Wertänderung in Datenbank ereignisgesteuert erfassen?? - th13 - 15.07.2020 10:43

(14.07.2020 09:15 )derandyk schrieb:  Gibt es unter Umständen eine Möglichkeit so einen Trigger mit ActiveX oder .NET Methoden zu verknüpfen um vielleicht mit Callbacks zu arbeiten?
Zu .net kann ich leider nix sagen. Da müsstest du in entsprechenden Foren nachfragen, geben wird es da sicherlich etwas.

Wenn du flexibel sein möchtest, schreib ein kleines Programm in einer beliebigen Sprache, dass die Änderung via TCP als formatierten String an eine konfigurierbare IP-Adresse sendet, wo dein LabVIEW-Programm auf einem Port lauscht. Wenn du die Sprache geeignet wählst, kannst du sogar für verschiedene Plattformen kompilieren, und dann kann es dir schon fast egal sein, auf was für einem Rechner die Datenbank läuft.

Wenn absehbar ist, dass du oder deine IT immer Kontrolle über den Datenbankserver haben werden und das auch immer ein Windowsrechner ist, würde ich das Updateprogramm auch in LabVIEW schreiben, dann hast du alle Komponenten in einem LabVIEW-Projekt und verschiedene BuildSpecifications erzeugen die unterschiedlichen Applikationen. Dann kann man auch etwas komfortabler mittels Networkstreams kommunizieren.

Thomas