DDE zu Datenbank Access --> neu Zugriff über DLL möglich

weisskarsten
Beiträge: 22
Registriert: Dienstag 21. Oktober 2008, 18:18

DDE zu Datenbank Access --> neu Zugriff über DLL möglich

Beitrag von weisskarsten » Donnerstag 7. April 2011, 13:24

Hallo Profilabgemeinde

Wie kann ich eine DDE Verbindung von Profilab in Microsoft Access nutzen ??
Mit Excel ist das ja kein Problem.
Ich möchte Access als Datenbank für aufgezeichnete Meßwerte nutzen.
Vielleicht hat jemand ein Beispiel als Ansatzpunkt.

Mit Freundlichen Grüßen
Karsten
Zuletzt geändert von weisskarsten am Dienstag 11. Oktober 2011, 14:22, insgesamt 1-mal geändert.

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Montag 11. Juli 2011, 11:22

weisskarsten hat geschrieben:Hallo Profilabgemeinde

Wie kann ich eine DDE Verbindung von Profilab in Microsoft Access nutzen ??
Mit Excel ist das ja kein Problem.
Ich möchte Access als Datenbank für aufgezeichnete Meßwerte nutzen.
Vielleicht hat jemand ein Beispiel als Ansatzpunkt.

Mit Freundlichen Grüßen
Karsten

Hallo zusammen,

ist zwar schon ein älteres Thema, möchte aber trotzdem dies noch mal aufgreifen, da hierzu nicht viel zu finden ist im Forum.

Messdaten in eine Datenbank zu schreiben ist i.d.r. für messtechnische Anforderungen heutzutage ein Standard. Egal ob mit Access oder MySQL oder sonstigen Datenbanken gearbeitet wird ist meiner Meinung nach eine Kommunikation über DDE nicht sinnvoll möglich. Bei DDE muß die Anwendung aktiv sein (z.B. Excel) und eine Speicherstelle direkt ansprechen. Die Daten werden dann im String – Format übergeben. Die Datenbank ist i.d.r. passiv und kann diese Art der Kommunikation nicht erfüllen. (Aufwendige Ausnahmen, von hinten durch die Brust, hiervon ausgenommen)

Dazu kommt, dass bei einer Datenbank zuerst umfangreiche Information übertragen werden muß. (z.B. wer will was wo hin schreiben und darf der das überhaupt???) DDE stellt nur den Messwert zur Verfügung, sonst nichts.

Ich stelle mir eine Kommunikation zwischen ProfiLab und Datenbank so vor:
PL stellt die Messwerte in ein Log-File und ruft eine kleine exe auf, welche sich die Datenbankinformation über ein config – File lädt. Das exe – File nimmt die Daten auf, löscht das temporäre File (oder lässt es stehen) und überträgt die Daten an die Datenbank. Die exe – File – Lösung würde ich in VB programmieren, ein Log – File zu erstellen und ein exe – Tool aus PL aufzurufen ist unproblematisch. Diesen Zyklus, könnten man dann alle xSekunden oder xMinuten auslösen. Das exe File deaktiviert sich nach getaner Arbeit immer wieder.

Hat jemand in der Richtung schon Erfahrungen gesammelt?
Was sagt der Softwareanbieter zur Datenbankproblematik (Upgrade oder ein Modul hierzu geplant?)
Hat jemand Interesse an meiner geplanten Lösung?

Ich werde in den nächsten Tagen versuchen ein entsprechende VB – Lösung zu programmieren, da ich diese Funktionalität benötige. Alternative wäre das teuere und umfangreiche LabView, was mich aber erschlägt und ich eigentlich für meine kleine Anforderung nicht möchte :(

Danke für jedes Feedback im Voraus.
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DDE zu Datenbank Access

Beitrag von abacom » Dienstag 12. Juli 2011, 08:12

Was sagt der Softwareanbieter zur Datenbankproblematik
Vielleicht erst einmal etwas zur Begriffsbestimmung...
http://de.wikipedia.org/wiki/Datenbank

Wenn ich die Frage richtig verstehe, geht es hier aber um eine Tabellendatei (TABLE) z.B. im ACCESS-Format
und nicht um eine ganze Datenbank - soweit korrekt?

Eine solche "Tabelle" lässt sich mit dem Messwertrekorder (im gängigen CSV-Format) leicht erzeugen.
ABACOM support

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Dienstag 12. Juli 2011, 12:25

Ich möchte Access als Datenbank für aufgezeichnete Meßwerte nutzen.
Vielleicht hat jemand ein Beispiel als Ansatzpunkt.
Für mich ist die Frage ganz eindeutig. Es wurde gefragt, wie man von PLE aus direkt in eine Datenbank schreiben kann, in diesem Fall direkt in eine Access Datenbank. Diese kann natürlich mehrere Tabellen enthalten, spielt aber keine Rolle.

Für große Datenmengen hat eine Datenbank enorme Vorteile. Man kann die eingeschriebenen Daten von verschiedenen PC´s mit vielen unterschiedlichen Systemen auswerten. Beispielsweise Access,Excel,PHP, etc.

Und man kann relativ einfach Daten abfragen:
Zeige mir alle Daten aus Tabelle X vom 1.4.2011 aus der Spalte Volt die kleiner 230 sind
Das geht mit einer CSV Datei, wie sie der Messwertrekorder anlegt, nicht, oder nur sehr umständlich.

Aber das ist sicherlich soweit bekannt.
Es gibt in PLE derzeit keine Möglichkeit direkt in eine Datenbank zu schreiben.
Zuletzt geändert von KAKTUS am Dienstag 12. Juli 2011, 16:38, insgesamt 2-mal geändert.
stachlige Grüße, Kaktus

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Dienstag 12. Juli 2011, 12:28

Aber es gibt Tools um CSV Dateien in eine Datenbank zu schreiben.

http://www.spectralcore.com/fullconvert ... -mysql.php

Damit ist aber auch nichts gewonnen.
stachlige Grüße, Kaktus

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DDE zu Datenbank Access

Beitrag von abacom » Mittwoch 13. Juli 2011, 08:27

Dann muss ich leider passen. Mir fehlen wohl die Kenntnisse, wie sich so etwas sinnvoll realisieren lässt.
Es müssten dazu dann ja sicherlich die Datenbanktypen und Strukturen analysiert, Namen und Formate von Tabellen und Feldern ermittelt werden, Zugriffsrechte verwaltet werden, etc. pp.

Ich sehe leider nicht, wie das auf einfachem Wege und allgemeingültig gehen soll.
ABACOM support

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Mittwoch 13. Juli 2011, 15:30

Hallo zusammen,

@abacom
Ich wollte mit meiner Frage an den Hersteller zum Thema Datenbank keine grundsätzliche Kritik aussprechen, also bitte nicht falsch verstehen. Meine Frage bezog sich lediglich auf evtl. Modifikation oder Erweiterung der Software in der Sache. Ich finde nach wie vor, für überschaubare Projekte, PL4 für eine tolle und schnelle Alternative zu manchen mittlerweile sehr überladenen Programmiersystemen.

@alle
Ob man nun Access als echtes Datenbanksystem bezeichnen mag oder auch nicht ist es, wie Kaktus bereits beschrieben hat, mit PL derzeit nicht möglich in Datenbanken zu schreiben (man könnte ja auch z.B. eine MySQL-Datenbank nehmen, völlig egal).

Die Anforderung ist i.d.r. folgende:
Es befindet sich unterschiedlichste Messtechnik an mehreren Maschinen im Einsatz. Die Messwerterfassung bzw. die Maschinenparameter werden von PL erfasst und angezeigt. Evtl. werden bei zyklischen Messungen die Messwerte mit Zeitstempel in einer Tabelle hinterlegt. Auch eine Datenspeicherung mit dem Messwertrekorder ist eine denkbare Option. Läuft die Messtechnik jedoch über mehrere Tage, Monate oder Jahre an einer Maschine, sind die Daten in der Form nicht mehr handhabbar (auf jeden Fall ohne größeren manuellen Eingriff). D.h. die Daten müssten ordentlich und strukturiert in eine Datenbank. Hieraus besteht dann die Möglichkeit individuell Datenpakete abzufragen (Datenbankviewer o.ä.).

Da ich in meinem nächsten Projekt vor habe mit PL in eine Access – Datenbank, oder auch Tabelle zu schreiben (also ich kenne übrigens den Unterschied und brauche dazu keinen Verweis auf Wikipedia), habe ich in der Anlage ein Beispiel dazu angefertigt.

Kopiert man mein Beispiel auf Laufwerk c:\ , so kann man ohne zu editieren die Funktion testen. Die „mwrecorder.exe“ (muß erst noch compeliert werden und in das Verzeichnis kopiert werden, da fertig compeliert zu groß hier für's Forum) generiert aus Zufallszahlen vier Messwerte zwischen 0 und 100 und schreibt diese mit Messzeit in eine Tabelle und eine Messwertrecorder – Datei. Nach zehn Messungen (zehn Zeilen) wird eine kleine exe – Datei Namens „txt_nach_access.exe“ aufgerufen. Diese wurde von mir in VB6 geschrieben. Aus der „txt_nach_access.cfg“ holt sich das Programm dann die Info, wo sollen die Daten hin (Access – Datenbank), wo liegen die Daten (Messwertrecorder Datei), in welche Tabelle sollen die Daten (Name der Tabelle), soll ein LogFile angelegt werden (zeigt an ob die Übertragung ok war und wie viel Zeit benötigt wurde) und wie heißen die Spalten wo die Messwerte rein sollen. Die Datenbank ist in Access97 angelegt (kann auch 2000 oder höher sein). Die Übertragung erfolgt im Format „String“ (dies lässt sich leicht hin und her konvertieren). In meinem Beispiel sind es 9 Parameter die gesetzt werden müssen bei 5 Messwerten (maximal sind 9 Werte möglich). Interessant ist es natürlich auch zu sehen wie gut die Datenbank zu erreichen ist (Übertragungszeit in ms). Hier muß evtl. mit dem Parameter „Konfiguration: Anwendung…“ >> „MDB Übertragungszeit“ aktuell 450ms Zeitfenster, gespielt werden (i.d.r. reicht das aber aus). Der Messzyklus (aktuell 1 Sekunde) kann auch noch verändert werden. Das VB6 File „txt_nach_access.exe“ und das Konfigurationsfile „txt_nach_access.cfg“ müssen immer im gleichen Verzeichnis stehen. Das LogFile „txt_nach_access.log“ wird automatisch erstellt und liegt ebenfalls im gleichen Verzeichnis. (Vorausgesetzt Logfile=1 im Config-File / alternativ Logfile=0)

Vielleicht kann ich hiermit jemanden helfen bzw. eine Anregung für PL & DB geben.

Wenn jemand Interesse zeigt kann ich gerne über den Stand meines Projektes informieren.

Gruß
RHH
Dateianhänge
MWRecorder.zip
PL4 Programm muß noch compeliert werden und dem PL4_Access Verzeichnis hinzugefügt werden
(1.76 KiB) 529-mal heruntergeladen
PL4_Access.zip
Verzeichnis mit allen dazugehörigen Dateien (unter c:/ kopieren)
(39.05 KiB) 523-mal heruntergeladen
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Mittwoch 13. Juli 2011, 17:39

@RHH

Du hast hier ein sehr interessantes Thema angeschnitten mit dem ich mich seit ca. 5 Jahren beschäftige, also Datenbank im allgemeinen, speziell MySQL und Access.
Aufgrund der offenen Anregungen und der doch relativ langen Entwicklungszeit zur nächsten PLE Version, habe ich es bisher nicht sinnvoll gefunden, auch noch das Thema Datenbank anzusprechen bzw. anzuregen. Obwohl dieses Thema für ernsthafte Messwertspeicherung sehr wichtig wäre.

@Abacom

Ich denke das die Sache nicht ganz so schwierig ist wie Sie denken. Sag ich jetzt einfach mal so :-)
Denn damit sich die Programmierer nicht soviel Gedanken machen müssen, wurde eine ODBC Schnittstelle entwickelt. ODBC regelt die Kommunikation zu Datenbank und zum Anwenderprogramm. Als Programmierer kümmert es einen nicht ob Oracle, MYsql oder Access Verwendung findet. Das macht alles der Endanwender im ODBC Treiber.

Ich zitiere teilweise aus Wikipedia
Open Database Connectivity (ODBC, dt. etwa: „Offene Datenbank-Verbindungsfähigkeit“) ist eine standardisierte Datenbankschnittstelle, die SQL als Datenbanksprache verwendet. ODBC bietet also eine Programmierschnittstelle (API), die es einem Programmierer erlaubt, seine Anwendung relativ unabhängig vom verwendeten Datenbankmanagementsystem (DBMS) zu entwickeln, wenn dafür ein ODBC-Treiber existiert.

ODBC wurde ursprünglich von Microsoft auf Basis des Call Level Interface von X/Open und ISO/IEC entwickelt, ist aber inzwischen auch von anderen Softwareherstellern übernommen worden. In vielen Bereichen ist ODBC mittlerweile als Standard etabliert.

ODBC-Treiber haben einen unterschiedlichen Funktionsumfang:

Core (nur Basisfunktionalität)
Level 1
Level 2

Moderne Programmierumgebungen erlauben dadurch den unkomplizierten Zugriff auf sehr viele unterschiedliche Datenbank-Verwaltungssysteme (über vorgefertigte datensensitive Steuerelemente). Der Datenzugriff erfolgt nie unmittelbar auf eine Tabelle oder eine Datenbank, sondern immer über die entsprechende (ODBC-)Komponente. Mit ODBC kann auf jede lokale oder ferne Datenquelle zugegriffen werden.

Für objektorientierte Programmiersprachen (z. B. C++, Java) sind Klassen verfügbar, die Methoden für den Umgang mit dem Datenmaterial der unterschiedlichen Datenbank-Systeme definieren. Der Programmierer braucht sich um datenbankspezifische Details nicht mehr zu kümmern.
Datenbanken und Tabellen kann man sehr gut mit kostenlosen externen Tools verwalten, wie z.B. MySQL Administrator oder MySQL Workbench, verwalten. Das müsste nicht in PLE integriert werden. Es müsste eine Möglichkeit geschaffen werden, eigene Datenbank Befehle , also SQL Befehle, abzuspeichern und diese dann durch triggern eines Einganges zu starten. Man könnte also statt eines MWR einen SQL Rekorder nehmen, und ein Gegenstück um Daten aus der Datenbank auszulesen.
Hier mal ein Link zu einer guten deutschen Seite zur Einführung in SQL
http://sql.1keydata.com/de/
Zuletzt geändert von KAKTUS am Freitag 15. Juli 2011, 14:03, insgesamt 1-mal geändert.
stachlige Grüße, Kaktus

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DDE zu Datenbank Access

Beitrag von abacom » Donnerstag 14. Juli 2011, 09:38

Ich denke das die Sache nicht ganz so schwierig ist wie Sie denken. Sag ich jetzt einfach mal so
Nun, um es deutlich zu sagen: Datenbankprogrammierung ist nicht unsere Welt. Wir bekennen uns hier ausdrücklich zu einer vermeintlichen Wissenslücke, auch wenn der eine oder andere das mit einem mitleidigen Kopfschütteln quitieren mag.
Der Beitrag von Kaktus war insofern hilfreich, dass ich jetzt weiss, dass ich nichts weiss.
Vielleicht gibt es "Datenbank-Füchse", die auf Basis unseres DLL-API etwas sinnvolles auf die Beine stellen können?
Ich denke da müssen Leute ran, die in der Datenbankwelt zuhause sind. Sorry!
ABACOM support

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Donnerstag 14. Juli 2011, 10:44

Hallo zusammen,

ich sehe das genau so wie Kaktus. Ich arbeite seit Jahren mit Access und MySQL (weil kostenlos und gut). Die beiden lassen sich übrigens sehr gut verknüpfen, man kann z.B. mit Frontend Access Daten in MySQL editieren (Löschen, schreiben und verändern jedoch nichts an der Datenbankstruktur verändern) so als wäre man in einer Accessdatenbank.

Für die Kommunikation benötigt man in Access lediglich standardisierte Windows – dll’s wie z.B. „msado15.dll“ mit Microsoft AciveX DataObjekts x.x Library. Die Syntax unter VB / VBA kann dann z.B. in einfachster Form so aussehen:

Dim adoc As New ADODB.Connection
Dim dbs As New ADODB.Recordset

Datenbank = …Pfadangabe und Name der Datenbank

adoc.Open "provider=Microsoft.jet.oledb.4.0;data source=" & Datenbank
dbs.Open Tabelle, adoc, adOpenKeyset, adLockOptimistic
dbs.AddNew
dbs!Name = …neuer Datensatz, z.B. Müller, Huber usw…
dbs.Update
dbs.Close
adoc.Close


Nimmt man für adoc.Open statt Microsoft.jet.oledb… den MySQL ODCB – Treiber (welcher natürlich erst auf dem Rechner installiert sein muß und entsprechend konfiguriert sein sollte) spricht man mit der gleichen Syntax die eingestellte MySQL Datenbank an.

Man müsste also lediglich den Schnittstellentreiber bzw. die entsprechende dll laden und dann mit standarisierten SQL Befehlen die Datenbank ansprechen und Informationen über Variablen austauschen. Nach Beendigung der Aktion schließt man die Datenbank wieder ordentlich.

Natürlich könnte man auch noch mit „Microsoft DAO“ arbeiten, Datenbankfelder erweitern, verändern, erstellen und löschen, aber das halte ich für eine Messsoftwareanwendung für unnötig. Das macht man besser mit einem speziell dafür vorgesehenen Tool (Datenbankerstellung). Reinschreiben und evtl. Lesen würde für eine Software wie PL absolut ausreichend sein.

@abacom
Hätte PL dann noch einen GPIB – Schnittstellenzugang, dann würde ich 100%Punkte für Abacom vergeben. …nur noch so am Rande… :roll:
Eine dll wäre auch eine denkbare Lösung aber, hier muß ich eingestehen, ich hatte noch nie Erfolg mit Programmieren einer dll für PL und hab’s dann letztendlich aufgegeben.

Ich leg noch mal ein Excelfile mit VBA Code als Beispiel bei, mit dem man Daten welche mit dem Messwertrecorder von PL aufgezeichnet wurden, in eine Datenbank (Access) schieben kann. In den VBA – Editor kommt man mit „Alt & F11“. Das Excel macht übrigens genau, wie das in meinem vorhergehenden Beitrag, beiliegende VB6 – Progrämmchen „txt_nach_access.exe“. Nur das abreitet unsichtbar im Hintergrund und schließt sich selbst wieder bei getaner Arbeit (das Excel macht das natürlich nicht).

PS: Was ist eigentlich mit dem Themenstarter (Weisskarsten), kein Interesse mehr? ;)
Dateianhänge
txt_nach_access.zip
Excel mit VBA-Code um MWR-Daten in MS-Access zu schreiben
(16.03 KiB) 501-mal heruntergeladen
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Donnerstag 14. Juli 2011, 11:22

Nun, um es deutlich zu sagen: Datenbankprogrammierung ist nicht unsere Welt. Wir bekennen uns hier ausdrücklich zu einer vermeintlichen Wissenslücke, auch wenn der eine oder andere das mit einem mitleidigen Kopfschütteln quitieren mag.
Der Beitrag von Kaktus war insofern hilfreich, dass ich jetzt weiss, dass ich nichts weiss.
Vielleicht gibt es "Datenbank-Füchse", die auf Basis unseres DLL-API etwas sinnvolles auf die Beine stellen können?
Ich denke da müssen Leute ran, die in der Datenbankwelt zu hause sind. Sorry!
Ok, akzeptiert. Man kann schlecht in einer Thematik programmieren wo man nicht zu hause ist.
Sicherlich ist der Weg über eine DLL der bessere und schnellere. Einfaches Zeilenweises hinzufügen wäre ja für den ersten Test vollkommen ausreichen. Da sind wieder mal die DLL Spezialisten gefragt.
stachlige Grüße, Kaktus

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DDE zu Datenbank Access

Beitrag von abacom » Freitag 15. Juli 2011, 09:40

@RHH:

(Dumme) Frage zu...
dbs!Name = …neuer Datensatz, z.B. Müller, Huber usw…
Woher kann denn ProfiLab wissen, dass es z.B. ein Feld wie "Name", "PLZ" , "Messwert", "Uhrzeit", (...)
in der Datenbank überhaupt gibt oder gar welches Format(Typ) das Feld hat?
Die gleiche Frage stellt sich für die Tabellen in der Datenbank. Woher die Strukturinfo der Datenbank nehmen?
Dass das Ganze nach diesem Schema abläuft ist schon klar (aber?)...

- Datenbank öffnen
- Tabelle wählen (Welche gibt es? Neue anlegen?)
- Datensatz wählen (Wie? Hinzufügen, Ändern, Löschen?)
- Feld adressieren (Welche gibt es?)
- Wert schreiben / lesen (Format?)
- Alles wieder schliessen
ABACOM support

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Freitag 15. Juli 2011, 16:36

stachlige Grüße, Kaktus

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: DDE zu Datenbank Access

Beitrag von abacom » Montag 18. Juli 2011, 08:35

Danke, schau´ich mir an...
ABACOM support

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Montag 18. Juli 2011, 10:09

abacom hat geschrieben:@RHH:

Woher kann denn ProfiLab wissen, dass es z.B. ein Feld wie "Name", "PLZ" , "Messwert", "Uhrzeit", (...)
in der Datenbank überhaupt gibt oder gar welches Format(Typ) das Feld hat?
Die gleiche Frage stellt sich für die Tabellen in der Datenbank. Woher die Strukturinfo der Datenbank nehmen?
Hallo noch mal,

also in der Regel sieht das so aus, dass wenn Messwerte in eine DB geschrieben werden sollen, diese klare Vorgaben hat (also in einer DB wird einem ein Platz zugewiesen). So ist auch immer bekannt wo, in welchen Format, die Daten geschrieben werden sollen. Dies ist Voraussetzung und muß nicht von PL identifiziert werden. Alternativ kann es natürlich auch sein, dass eine DB angelegt bzw. erstellt wird. Dann habe ich natürlich selbst die Möglichkeit die erforderlichen Parameter festzulegen.

Wie bereits in meinen Beispielen VB6 und VBA/Excel aufgezeigt, läuft das genau so.
Es werden folgende Informationen benötigt bzw. übergeben

• Pfad und Name der Datenbank (nur bei Access DB)
• Name der Tabelle in der die Daten geschrieben werden sollen
• Pfad und Name der Quelle (MWR-Datei von PL oder man übergibt die Messwerte direkt in das Programm bzw. das Modul für die Datenübertragung)
• Namen der Spalten in welche die Messwerte übergeben werden sollen
• Die Messwerte selbst (evtl. Optional von 1-9)

Zum Format würde ich mit keine großen Gedanken machen, da es sich immer um Zahlenwerte handelt bietet sich hier „Double“ oder auch „String“ an, da man aus String i.d.r. in jeder Software bequem in Zahlenwerte zurück konvertieren kann. (Das macht z. B. weniger Probleme mit Datum- und Zeitwerten)

Diese Parameter sind ganz klar vorgegeben und müssen von dem „Ersteller der Datenbank“ beachtet, bzw. vorgegeben werden. Die Datenrichtung ist auch eindeutig, also nur „Schreiben eines neuen Datensatzes“ denn warum soll ein Messwerterfassungsprogramm aus der DB lesen müssen.

Das Blockschaltbild in der Anlage verdeutlicht das Ganze noch mal.

Würde man ein Modul für z.B. MySQL erstellen, wäre das Ganze noch ein bisschen einfacher. Hier muß der OBBC – Treiber auf dem Rechner installiert und eingerichtet sein. Ist dies der Fall, dann sind viele relevante Parameter schon gegeben. Eingerichtet wird dies unter „Verwaltung >> Datenquellen >> und z.B. MySQL51 Connector“ …siehe mein Bild in der Anlage.

Hier müsste dann nur noch die Tabelle angegeben werden und der Messwert selbst. Das Format würde ich auch wie im o. g. Beispiel auf Double oder String beschränken. Etwas anderes muß nicht sein. Die Befehle sind SQL – Standard wie z. B. db.AddNew für neue Datenzeile, oder db.Update für Speichern usw., usw. Andere Befehle wie Sortieren, Nächster Datensatz, Erster Datensatz, Letzter Datensatz, Löschen, usw., usw., braucht man in dem Fall nicht.

Ein Modul für in „Access Schreiben“ und ein Modul für in „MySQL Schreiben“ bis zu maximal 1-9 Werte müsste eigentlich für PL total ausreichend sein. Lesen, Löschen oder Ändern ist meiner Meinung nach für ein Messwerterfassungstool unnötig.

Exakt wie hier beschrieben habe ich im vorhergehenden Beitrag dies für Access und MWR-Dateien in VB6 und VBA/Excel (mit Einsicht in den Quellcode >> Excel und „Alt“ & „F11“) realisiert. Die Beispiele sind funktionell und können von jedem getestet werden. Möchte man im VBA/Excel – Beispiel in eine MySQL Datenbank schreiben, ist lediglich die Zeile,

adoc.Open "provider=Microsoft.jet.oledb.4.0;data source=" & Datenbank

z.B. durch,

Set adoc = New ADODB.Connection
adoc.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=" & mysql_Server & "; DATABASE=data; UID=" & mysql_user & ";PWD=" & mysql_PW & "; OPTION=3"


und am Schluß ein

Set adoc = Nothing

zu ersetzen (unverbindlich, da nicht getestet). Die Variablen “mysql_Server”, “mysql_user” und “mysql_PW” sollten natürlich gesetzt werden. (Name Datenbank, Name und Passwort). Werden diese nicht gegeben, geht, so glaube ich noch zu wissen, automatisch der Dialog von MySQL-Connector auf.

Ich gebe zu, Datenbank & Co ist ein reisen Thema für sich. Hier in die Tiefe einzusteigen benötigt viel Zeit und Engagement. Wer sich dafür interessiert bzw. diese Funktionalität benötigt muß sich mit den o. g. Themen befassen. Dies ist sicherlich nicht die Aufgabe von PL. Die Funktion, auf einfachste Weise in eine DB zu schreiben, ist, so glaube ich, nicht so ein großer Aufwand (wenn man mal den Dreh raus hat). Dies sollte aber trotzdem nur eine Anregung sein und ein Feedback auf die Fragestellung von „Weisskarsten“ (obwohl er sich nun offensichtlich nicht mehr dafür interessiert). Entscheiden muß das die Fa. Abacom ob man hier aktiv werden möchte und ob es einen Markt dafür gibt.

Ich werde auf jeden Fall den Weg über einen Exe-Aufruf von meinem VB6 Progrämmchen umsetzen, da ich mehrere messtechnische Versuche mit PL am Laufen habe und bei uns in der Firma alle Maschinendaten und Parameter zentral in eine DB geschrieben werden.
Dateianhänge
odbc.zip
Bildchen zur "Einrichtung" eines ODBC - Treibers für MySQL
(200.13 KiB) 449-mal heruntergeladen
Access_MDB.zip
Blockschaltbild (Idee / Beispiel) für Modul "Messwerte nach Accesss schreiben"
(88.6 KiB) 452-mal heruntergeladen
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

weisskarsten
Beiträge: 22
Registriert: Dienstag 21. Oktober 2008, 18:18

Re: DDE zu Datenbank Access

Beitrag von weisskarsten » Freitag 22. Juli 2011, 13:24

Hallo RRH

3 Monate nach meiner Fragestellung habe ich mit keiner Antwort mehr gerechnet.(wie schon so oft in diesem Forum)
Ich schreibe zur Zeit über DDE mit Excel die Daten nach Access. Wie du schon erwähnt hast "von hinten durch die Brust ins Auge".
Datenbankprogrammierung ist nicht meine Welt.
Deine Lösung finde ich absolut genial.
Seit 7 Jahren laufen Messungen von Umweltdaten und Heizungsdaten die in einer Datenbank gespeichert werden. Diese Daten werden zur Heizungsoptimierung
und zur Erstellung von Kennlinien für Heizungen verwendet.
Ich habe in letzter Zeit ein anderes Projekt realisiert das die Ansteuerung von FS20 Komponenten (Heizungsregelung, Einzelraumsteuerung) mit Profilab ermöglicht. Die DLL ist inzwischen fertiggestellt.
Aber jetzt zu deiner "einfachen" aber genialen Lösung Daten von PL in eine Datenbank zu schreiben.
In meinem Projekt laufen 7 Meßwertrecorder mit je 16 Eingänen. Mit deinem Beispiel kann man 8 (+ Zeit) Meßwerte übertragen. Besteht die Möglichkeit dein exe Programm für 16 bzw. "X" Meßwerte zu erweitern ??
Meine Programme erstelle ich mit Visual Studio in C++ (VB6 ist nicht unbedingt meine Stärke). Könntest Du mir den Quellcode per PM zusenden? (oder imForum).
Vielleicht kann ich dann das Programm für die 16 Meßwerte selbst anpassen.

Auf jeden Fall noch mal Danke für deine konstruktive Lösung. Leider ist das in dem Forum in letzter Zeit sehr selten.

Mit freundlichen Grüßen
Karsten

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Sonntag 24. Juli 2011, 00:01

Hallo Weisskarsten,

aufgrund einer aktuellen Aufgabenstellung bin ich auf der Suche hier im Forum auf deinem Beitrag gestoßen. Mein Beispiel welches ich hier eingestellt habe, sollte nur eine Anregung für eine Lösung sein. Da ich in meinen Projekt nur 6 Werte pro Messung übertragen muß, reicht mein kleines Programm für meine Zwecke aus. Natürlich lässt sich dieses individuell anpassen bzw. erweitern. 16 oder mehr Messwerte, sowie verschiedene MWR – Dateien wären auch kein Problem, könnte man natürlich machen.

Es würde mich interessieren, ob du mein Beispiel zum Laufen gebracht hast. In dem Excel im nachfolgenden Beispiel ist mit „Alt“ & „F11“ im VBA – Editor der Kern des Programms zu sehen. Ein paar Sachen kommen in VB6 natürlich noch dazu. Problem ist nur, dass ich ab gestern (Freitag d. 22.07.) nun 3 Wochen im Urlaub bin und der Quellcode für das VB6 Prog. auf meinem Arbeitplatzrechner ist. D.h. wird noch ein bisschen dauern.

Nach meinem Urlaub werde ich an der Sache weiter arbeiten und auf der Basis des o. g. Beispieles versuchen meine Anforderung umzusetzen. Übrigens, nur um einmal ein paar Eckdaten zu geben, eine Übertragung von 700 Messwerten (100 Zeilen MWR mit je 7 Werten in eine Access DB im Netz) dauert zwischen 100 und 300ms und ist sehr zuverlässig (d.h. es können auch andere Anwendungen auf dem Rechner parallel laufen) ...ist also durchaus zu gebrauchen

Na dann, viel Erfolg derweilen.....melde mich wieder
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: DDE zu Datenbank Access

Beitrag von KAKTUS » Sonntag 24. Juli 2011, 13:39

Problem ist nur, dass ich ab gestern (Freitag d. 22.07.) nun 3 Wochen im Urlaub bin und der Quellcode für das VB6 Prog. auf meinem Arbeitplatzrechner ist. D.h. wird noch ein bisschen dauern.
Die Probleme hatte ich auch immer. Wenn jemand mehrere Rechner nutzt, der sollte sich unbedingt mal Dropbox anschauen. Synchronisiert deine Dateien zwischen beliebig vielen Rechnern, und dass auch noch gratis. 2 GB kostenloser Speicherplatz! Über diesen Link gibts 250MByte noch obendrauf: Dropbox
stachlige Grüße, Kaktus

weisskarsten
Beiträge: 22
Registriert: Dienstag 21. Oktober 2008, 18:18

Re: DDE zu Datenbank Access

Beitrag von weisskarsten » Montag 8. August 2011, 18:46

Hallo RRH

Ich hoffe du hast deinen Urlaub gut verbracht, trotz SCH.... Wetter.
habe dein Excel-Beispiel auf 18 Daten erweitert. Einfach genial. (der Verweis auf config_laden mußte geändert werden, war wahrscheinlich noch für dein EXE Programm) Die Umsetzung zu einer EXE Datei ist mir aber nicht gelungen. Vieleicht kannst du den
Quellcode für VB6 mal posten oder per PN.
Versuche das dann in eine DLL umzusetzen, allerdings in C++.
Deine Idee ist so einfach wie genial . Besten Dank dafür.

Mit freundlichen Grüßen
Karsten

RHH
Beiträge: 22
Registriert: Freitag 5. Februar 2010, 08:36
Wohnort: Bayern / Nürnberg

Re: DDE zu Datenbank Access

Beitrag von RHH » Dienstag 16. August 2011, 10:31

Hallo Karsten,

nun ist mein Urlaub vorbei und wie versprochen in der Anlage der VB6 Quellcode. Ein paar Anmerkungen müsste ich noch dazu geben. Im Gegensatz zum VBA – Code im Excel sind hier noch ein paar Sachen geändert.

Ich bediene mich an ein paar Windows – Funktionen z.B. um die VB-exe unsichtbar aufzurufen. Das Programm ist weder auf dem Desktop noch im Taskmanager zu sehen

Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) _
As Long


und

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) _
As Long


Zudem ist die msado15.dll und die scrrun.dll eingebunden um überhaupt eine Datenbank kontaktieren zu können und um einfach und schnell Logfiles zu generieren (z.B. Übertragungszeit in die Datenbank festzustellen)

Den Quellcode für die Datenübertragung in Access findest du in der Datei Form1.frm.
In der Datei Modul1.bas sind die Funktionsaufrufe für Config-Daten laden (wo ist was >> Messdatenfile, Datenbank usw. und was soll wie übertragen werden), Strings aufteilen (Beschreibung und der eigentliche Parameter hinter dem „=“ Zeichen), ins Logfile schreiben wenn die Übertragung ok ist und, ins Logfile schreiben wenn ein Fehler auftritt.

Das Programm löscht das Messdatenfile und beendet sich selbst wieder nach getaner Arbeit. Die Datenbank wird natürlich vorher wieder sauber geschlossen.

Die Dateien kannst du mit einem üblichen Editor öffnen und ansehen (z.B. UltraEdit o.ä.)

Das Ganze ist natürlich noch ein unausgetüftelter Schnellschuß und durchaus noch Verbesserungswürdig. So wäre es z.B. interessant noch abzufragen, ob die Datenübertragung erfolgreich war, und wenn nicht, wenn z.B. die Datenbank exklusiv von jemand anderem geöffnet ist, das Messdatenfile von PL nicht zu löschen und die Übertragung zu einem Späteren Zeitpunkt nochmals zu versuchen. Usw, usw….

Wenn es dir gelingt, eine „Universal – dll“ für PL zu erstellen, hätte ich natürlich auch Interesse daran. Ich gehe nun in den nächsten Tagen mein Projekt wieder an und werde die Lösung mit meinem VB6 Programm weiter optimieren.

Was evtl. auch noch interessant ist, wenn es auf schnelle Datenübertragung ankommt, beim ersten Kontaktieren der Datenbank dauert es u. U. etwas länger bis die Verbindung steht (Netzwerk, bzw. das Laden der DLLs) Hier kann schon mal bis über eine Sekunde Zeit vergehen. Darum ist in dem Unterverzeichnis „txt_nach_access_logon_test“ noch mal ein Programm, welches zuerst angestoßen wird und überprüft, ob die Datenbank überhaupt zu erreichen ist. Damit ist dann der erste Kontakt hergestellt und die Datenübertragung funktioniert ab den ersten mal sehr schnell (~70 – 150ms für ein paar hundert Messwerte)

Übrigens, der Verweis den du im Excel ändern musstest bezieht sich entweder auf die Konfiguration für die Datenübertragung aus dem Tabellenblatt1 oder auf ein config-File im Textformat an definierter Stelle (Pfadangabe muß korrekt sein!). Dies kann man mit dem alternativen Funktiosaufruf bewirken.

Viel Erfolg damit…& Gruß
Dateianhänge
txt_nach_access.zip
VB6 Projektdateien für PL4 MWR Daten in Access-DB zu übertragen
(67.99 KiB) 412-mal heruntergeladen
Gesetze der Programmierung:
Erweist sich ein Programm als nutzlos, muß es umfangreich dokumentiert werden.
Der Nutzwert eines Programms steigt antiproportional zur Menge seiner Ausgabedaten.

Grüße aus Franken
Roland


http://www.rhh-planet.de/

Antworten

Zurück zu „Datenschnittstellen“