LabVIEWForum.de
INDEX und ZEITSTEMPEL in Datenbank einfügen - 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: INDEX und ZEITSTEMPEL in Datenbank einfügen (/Thread-INDEX-und-ZEITSTEMPEL-in-Datenbank-einfuegen)



INDEX und ZEITSTEMPEL in Datenbank einfügen - Tobiw - 23.06.2010 10:35

Hallo,

Kurzerklärung des Programms (nur untere while-schleife interessant):
Der untere Programmteil ist nur dafür da die Datenbank zu öffnen (DB Tools Open Connection.vi), dort Daten abzulegen (DB Tools Insert Data.vi) und die Datenbank wieder zu schließen (DB Tools Close Connection).

Der obere Programmteil soll folgendes machen:
Ich lege meine 3 Messwerte (von lokalen Variable "Spannung") über das "Bündeln.vi" in die Datenbank (DB Tools Insert Data.vi). In meinem VI werden die drei Spannungen in die Spalte 3, 4 und 5 abgelegt.

Ich habe zwei Probleme:
1) Ich möchte einen INDEX (in die erste Spalte) der Datenbank schreiben, damit man die Datenbank besser verwalten kann und man schneller die gewünschten Werte auslesen kann. Mir wurde auch noch gesagt, dass ein sog. PRIMÄRSCHLÜSSEL von Vorteil wäre, um die Eindeutigkeit der einzelnen Messwerte zu gewährleisten. Für beides bräuchte ich eure Hilfe.

Mein Ansatz das „blaue i“ der while-Schleife pro Durchgang um 1 zu inkrementieren stellt leider keine Lösung für den Index dar, weil das Programm nach einer Unterbrechung wieder von 0 anfängt Hochzuzählen.

2) Ich möchte jedem Messwert einen Zeitstempel geben. Hierfür stand im „LV Database Connectivity Toolkit User Manual“ (“Formatting Date and Time”) ich sollte das DB Tools Format Datetime Str VI benutzen.
Damit wollte ich den Zeitstempel in die 2.Spalte meiner Datenbank schreiben. Leider wird aber nur das Datum angezeigt. Möglicher Fehler ist, dass ich beim Datenbank erstellen nur den Datentyp „DATE“ für die Spalte definiert habe. Ich habe versucht einen neuen Datentyp für StandardZEIT und –datum (%c) einzufügen, aber dann funktioniert das DB Tools Insert Data.vi nicht mehr.

Ich habe euch folgendes angehängt:
a) Screenshot meiner Datenbank-Anzeige
b) Mein Hauptprogramm, um den Index, Zeitstempel und die Messwerte in die Datenbank zu schreiben (obere while-schleife für Messwerterfassung (für meine Fragen uninteressant). Untere while-schleife für Datenbankspeicherung)
c) Mein Programm um eine Tabelle in der Datenbank zu erstellen.
d) Das Unter-VI "Mittelwert.vi", um mein Hauptprogramm öffnen zu können (eigentl. egal, da ihr die Messwerte der Photovoltaik-Anlage nicht habt)

Also ich brauche wirklich eure Hilfe.
Gruß Tobi

PS: ich benutze LV 2009_Service Pack 1 und das Connectivity Toolkit


INDEX und ZEITSTEMPEL in Datenbank einfügen - SeBa - 23.06.2010 11:06

Du hast jetzt nicht gesagt, was für eine Datenbank du da erzeugst/benutzt... aber bei SQL beispielsweise gibt es das Autoinkrement für den Index. Da brauchst du dich nicht selbst drum kümmern.

Gruß SeBa


INDEX und ZEITSTEMPEL in Datenbank einfügen - Tobiw - 23.06.2010 11:13

' schrieb:Du hast jetzt nicht gesagt, was für eine Datenbank du da erzeugst/benutzt... aber bei SQL beispielsweise gibt es das Autoinkrement für den Index. Da brauchst du dich nicht selbst drum kümmern.

Gruß SeBa


Ich benutze den MySQL ODBC (OpenDataBaseConnectivity) um eine Datenbank auf dem Haus-Server meiner Uni zu erstellen. (Beantwortet das deine Frage?)


INDEX und ZEITSTEMPEL in Datenbank einfügen - SeBa - 23.06.2010 12:07

' schrieb:Du hast jetzt nicht gesagt, was für eine Datenbank du da erzeugst/benutzt... aber bei SQL beispielsweise gibt es das Autoinkrement für den Index. Da brauchst du dich nicht selbst drum kümmern.
' schrieb:Ich benutze den MySQL ODBC (OpenDataBaseConnectivity) um eine Datenbank auf dem Haus-Server meiner Uni zu erstellen. (Beantwortet das deine Frage?)


Das war keine Frage.


Gruß SeBa


INDEX und ZEITSTEMPEL in Datenbank einfügen - Tobiw - 23.06.2010 14:42

' schrieb:Du hast jetzt nicht gesagt, was für eine Datenbank du da erzeugst/benutzt... aber bei SQL beispielsweise gibt es das Autoinkrement für den Index. Da brauchst du dich nicht selbst drum kümmern.

Ich benutze eine ganz normale MySQL Datenbank.
Muss ich mit LabVIEW der MySQL Datenbank am Anfang einmal sagen, dass es das Autoinkrement anwenden soll? Wenn ja, wie mache ich das? Wenn nein, erstellt die Datenbank den Index ja von allein. => Wie/Wo kann ich den Index nachschauen?
(Mit phpMyAdmin findet man für meine Datenbank kein Index)


P.S. gibt es Vorschläge für den Zeitstempel?


INDEX und ZEITSTEMPEL in Datenbank einfügen - SeBa - 23.06.2010 14:49

Google

z.B. Link


Gruß SeBa


INDEX und ZEITSTEMPEL in Datenbank einfügen - rolfk - 24.06.2010 07:48

Also bei dem SQL Datenbanken die ich kenne (sorry keine wirklichen Erfahrungen mit MySQL) sind sogenannte Primärschlüssel automatisch autoinkrementing und unique, by default.

Das heisst Du schreibst diese Kolonne von Deiner Applikation aus gar nicht, sondern die Datenbank macht das automatisch wenn Du einen neuen Datensatz einfügst (INSERT). Damit müsstest Du nur noch den Zeitstempel und die Messwerte hineinschreiben.

Die Einstellung ob eine Kolonne ein Primärschlüssel ist, unique sein muss, und autoinkrementing ist (wobei ein Primärschlüssel diese zwei letzteren meines Wissens immer bedingt) legt man beim Anlegen der Tabelle fest. Das kann man auch von LabVIEW mit SQL Kommandos tun (CREATE) aber ist nicht üblich, da dieser Teil der SQL Syntax alles ausser einheitlich ist zwischen verschiedenen SQL Databankanbietern.

Wie man den automatisch erstellten Index nach dem Einfügen zurückbekommt ist auch wieder eine kleine Kunst. Die direkte Art ist bei jeder mir bekannten Datenbank wiederum ganz anders, SeBA hat Dir dazu einen Link für MySQL gegeben. Selber benütze ich normalerweise einen nicht sehr schnellen Kniff, indem ich nach dem Einfügen des Datensatzes eine Query starte die mir alle Records zurückgibt die ein bestimmtes Merkmal des gerade eingefügten Datensatzes besitzen und diese Query auch noch nach dem (Primär)Schlüssel sortieren lasse. Der letzte (oder erste bei inverser Sortierreihenfolge) Datensatz in der Query enthält dann den neu eingefügten Index. Das funktoiniert natürlich nur wenn man sicher ist dass nicht gleichzeitig mehrere Arbeitsplätze gleichzeitig kollidiernde Datensätze in die Datanbank schreiben. In diesem Fall muss man auf die Datenbankspezifischen Mechanismen zurückgreifen um den autoinkrementing Index eines neu eingefügten Datensatzes zu erhalten.