INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

parametertyp - datenzeiger: kein Anschluß unter dieser Kiste



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

08.11.2007, 23:16 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2007 14:04 von jg.)
Beitrag #14

rolfk Offline
LVF-Guru
*****


Beiträge: 2.314
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
parametertyp - datenzeiger: kein Anschluß unter dieser Kiste
Zitat:
' schrieb:siehe:
http://www.LabVIEWforum.de/index.php?showtopic=7581
oder auch
http://sourceforge.net/projects/pqsql2LabVIEW/

Ich verwende die C-API von PostgreSQL die in Form einer dll (bzw. unter Linux einer .so) vorliegt. und binde deren Funktionen in LV ein. Das heißt ich verzichte vollständig auf ODBC und auf das Database-Toolkit von LV. Erreiche dadurch aber, dass die Datenbankschnittstelle sowohl unter Linux als auch unter Windows 1zu1 funktioniert, was bei ODBC nicht der fall sein dürfte - jedenfalls nicht so ohne weiteres - und definitiv nicht beim DB-Toolkit, welches ADO verwendet, was Microsoft proprietär ist.

Momentan bin ich gerade dabei mir die COPY-Funktionen ( http://www.postgresql.org/docs/8.2/interac...PQ-COPY-RECEIVE ) verfügbar zu machen. Was (noch) daran scheitert, dass mein Aufruf von PQgetCopyData in LV nur Grütze liefert - siehe oben...

Der Datenpointer den Du da gerne haben möchtest ist ein Pointer auf einen Pointer, Das unterstützt LabVIEW nicht direkt, da es nicht eindeutig ist. In C kann ein Pointer im Pinzip ein Array sein oder einfach ein Pointer. Ein Pointer to Pointer kann also ein Array von Pointern sein, ein Pointer zu einem Array, ein Array von Arrays, oder auch ein Pointer zu einem Pointer. LabVIEW kann diese Dinge alle nicht direkt unterstützen und was noch schlimmer ist, kann auch nicht raten welche der vier Möglichkeiten nun gemeint ist, abgesehen von den Memorymangementdetails die hier alles noch extra komplex machen.

So wie ich die Funktionsbeschreibung lese wird der Speicher vom PostgreSQL Treiber angelegt. Das ist im Prinzip schon einmal nicht schlecht, da Du diesen Parameter dann einfach als einen Pointer auf einen uInt32 konfigurieren kannst. Der Inhalt aus diesem Buffer kannst Du dann mit einem Memorycopy in einen LabVIEW String kopieren, aber das ist auch nicht ganz trivial. Zuerst musst Du nämlich ein entsprechendes Array von Bytes anlegen, dann mit memcpy() die Daten aus dem PostgreSQL Buffer in Dein LabVIEW Array kopieren.
Zuletzt bitte den Pointer mit PQfreemem() von PostgreSQL wieder deallozieren.

Die memcpy() Funktionen kannst Du auch direkt aus LabVIEW mit einer CLN aufrufen nur heissen sie dort MoveBlock(). Der Libraryname ist dann "LabVIEW".

Ein kurzes Beispiel ist angehängt aber natürlich ohne Gewähr. Ich habe noch nie mit PostgreSQL gearbeitet und weiss auch nicht genau wie der PGConn handle parameter genau gemeint ist, noch wann wirklich ein Fehler von der Funktion angegeben wird.


Sonstige .vi  POSTGRE_Copy_Data.vi (Größe: 19,98 KB / Downloads: 229)
(LV 8.5)

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
parametertyp - datenzeiger: kein Anschluß unter dieser Kiste - rolfk - 08.11.2007 23:16

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Übergabe von Datenzeiger Cubaner 3 6.283 22.01.2008 13:18
Letzter Beitrag: rolfk

Gehe zu: