IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Access-Werte in LV einlesen
CamilloN
post 16. Apr 2010, 12:37
Post #1


new Member
*

Group: Members
Posts: 2
Joined: 16.04.2010
Member No.: 144
Zertifizierung: keine



Hallo zusammen,
Gleich vorneweg, gleicher Fred wurde im LabViewForum.de gepostet.

Ich hab ein Problem…wenigstens ist es das für mich… ich habe eine Datenbank mit vielen Messreihen und Messwerten. Die Datenbank (Access) hat mehrere Tabellen, eine Tabelle für die Protokolle der Messreihen, nur Textliche Informationen (Größe Spalten53 und Zeilen 5385). Und eine Tabelle mit Messwerte Zahlen und Schrift (Größe Spalten99 und Zeilen 79914). Kurz zum Aufbau der Tabellen
Messreihe:
IDMessung
1 MotorA Nennspannung Nennstrom…..
2 MotorB Nennspannung Nennstrom…
….
Messwerte:
Fortlaufende Nummer ,IDmessung ,Messwert Spannung ,Messwert Strom usw….
1 ,1 ,X ,X
2 ,1 ,X ,X
3 ,1 ,X ,X
4 ,2 ,X ,X
5 ,2 ,X ,X
……
Diese Tabellen werden an einem Prüfstand ständig erweitert und in Access abgespeichert. Nun möchte ich ein Programm in LV schreiben, in welchem ich mir von dieser DB Messreihen aussuchen kann und mir die Verläufe z.B. der Spannung als Diagramm anzeigen lassen kann.
Mit Ado-Tools konnt ich ohne Probleme die kleine Tabelle mit den Messreihen einlesen. Jedoch kommt bei der großen Messwerte Tabelle immer nicht genügend Arbeitsspeicher (zuhause4Gb in der Firma definitiv weniger). Der Datenzugriff dauert in der Firma schon bei der kleine Tabelle relativ lang.
Fragen:
-> Sind das für die ADO-Tools wirklich zu viele Daten? Oder mach ich was falsch?
-> Wäre es sinnvoll über ein extra Programm immer zuerst die Werte einzulesen sie dann lokal auf dem Rechner in eine Textdatei (CSV) Datei zu schreiben, um einen schnelleren Zugriff darauf zu bekommen? Außerdem müsste man so immer nur Aktuelle Werte aus der DB lesen.
->kann man bei ADO Tools nur spezielle Zeilen auslesen?
-> Wie groß dürfen CSV Dateien werden?
-> Gibt es allgemein eine elegantere Methode, also zum Beispiel keine CSV-Datei sondern hat LV vielleicht ein eigenes Format um solche Daten zu sichern, auf die es dann gut und schnell zugreifen kann? Oder ist es doch sinnvoller immer zu Beginn die komplette Datenbank auf den eigenen Rechner kopieren und von dort aus arbeiten. Wie sieht es da zugriffsgeschwindigkeitsmäßig aus, was ist da die beste Methode?
Ohh man ….. ich seh es … da gibt es noch viel zu tun…..
Zur information ich benutze LV8.2 in der Firma. Ein Beispiel zum Auslesen mit ADO-Tools hab ich angehängt.
Vielen Dank schonmal für eure Hilfe.
Internette Grüße
Vincenzo

P.S.
ich hoffe ich hab nix vergessen

Attached thumbnail(s)
Attached Image
Attached Image
 
Go to the top of the page
 
+Quote Post
CB
post 19. Apr 2010, 06:59
Post #2


proven Member
****

Group: Administrators
Posts: 314
Joined: 16.10.2006
From: Düsseldorf
Member No.: 2
LV Version: current
Zertifizierung: CLA
LV User seit: 2001



warum willst du denn die ganze Tabelle aus 80000 x 100 Datensätzen auf einen Schlag einlesen?

wenn du eine WHERE - Clausel in deinem SQL-Statement verwendest um die Anzahl der Datensätze einzuschränken, dann sollte das tadellos funktionieren ...

eine CSV-Datei kann so lang sein wie du willst, allerdings macht es Sinn die auf 65535 Zeilen zu begrenzen, damit sie auch mit Excel noch vollständig geladen werden kann ...

Wenn du mit einer Access Datei auf einem fremden Rechner über Netzwerk arbeitest, dann wird für jeden Query eine Kopie der DB auf deinen Rechner in einem temporärem Verzeichnis erstellt, das kostet unnötig Ressourcen. Besser ist es wenn du auf einer lokalen Kopie der DB arbeitest.

Das ADO Tool ist einfach nur ein Wrapper um die MS ADO Methoden. Prinzipiell kannst du damit alles das machen was man mit ADO auch machen kann ...


--------------------
künstliche Intelligenz ist besser als natürliche Dummheit!
rotabench:rotierende Prüfstände nach dem Baukasten-Prinzip
Go to the top of the page
 
+Quote Post
CamilloN
post 30. Apr 2010, 13:12
Post #3


new Member
*

Group: Members
Posts: 2
Joined: 16.04.2010
Member No.: 144
Zertifizierung: keine



Hallo für deine sehr schnelle Hilfe,
leider muss ich das Programm neben meiner alltäglichen Arbeit machen
und kann deswegen nicht immer gleich Sachen ausprobieren oder Antworten.

Ich muss gestehen ich hab von SQL rein garkeine Ahnung dadurch kann ich auch
mit der Where-clausel nix anfangen :-(

Da du meintest es ist sinnvoller eine kopie der DB auf der Platte zu erstellen,
hat sich das mit der CSV Datei geklärt :-)
Ich vermute, wenn ich mit der Where-Clausel einzelne Messreihen auswählen kann
dürfe es kein Problem sein mit ein paar Schrittchen die DB auf der lokalen Platte
aktuell zu halten.

aber was muss genau in der Where-Clausel drinstehen? Ich denke nur mit der
ID der Messung wird es wohl nicht getan sein.

internette Grüße
Vincenzo

Edit:
Sorry für meine Voreilige Antwort....hab Google befragt....und wie immer auch ne
Lösung gefunden...tja man muss halt nur lange genug suchen :-(
Sorry

This post has been edited by CamilloN: 30. Apr 2010, 15:18
Go to the top of the page
 
+Quote Post
CB
post 01. May 2010, 07:18
Post #4


proven Member
****

Group: Administrators
Posts: 314
Joined: 16.10.2006
From: Düsseldorf
Member No.: 2
LV Version: current
Zertifizierung: CLA
LV User seit: 2001



mit der Zeilen ID könnte man prima eine Where-Clause aufbauen, die die Anzahl der Datensätze reduziert.

Man könnte z.B. in einer While-Schleife immer 500 Zeilen am Stück auslesen in dem man sich die letzte ID merkt:

SELECT .... WHERE ID > letzte_ID_aus_dem_Schieberegister AND ID<= letzte_ID_aus_dem_Schieberegister+500

für den 1. Schleifendurchlauf wäre das dann
WHERE ID>0 AND ID <=500

10. Schleifendurchlauf:
... WHERE ID>5000 AND ID <=5500

usw ...

und so die Daten in 500 Zeilen Blöcken verarbeiten


--------------------
künstliche Intelligenz ist besser als natürliche Dummheit!
rotabench:rotierende Prüfstände nach dem Baukasten-Prinzip
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



Lo-Fi Version Time is now: 17.01.2018 - 23:08