Printable Version of Topic

Click here to view this topic in its original format

IBB Forum _ ADO-Toolkit _ Access-Werte in LV einlesen

Posted by: CamilloN 16. Apr 2010, 12:37

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


 

Posted by: CB 19. Apr 2010, 06:59

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 ...

Posted by: CamilloN 30. Apr 2010, 13:12

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

Posted by: CB 01. May 2010, 07:18

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)