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 

ZeilenID bei "Insert" mit LabVIEW-DB-Toolkit zurückholen



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!

20.11.2006, 10:08
Beitrag #1

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
ZeilenID bei "Insert" mit LabVIEW-DB-Toolkit zurückholen
Hallo zusammen,

habe folgendes Problem bei der Arbeit mit dem Datenbank-Toolkit von LabVIEW.

Zum einen arbeite ich mit 'ner MySQL-Datenbank, zum anderen (alternativ) lokal mit SQLite.

Ziel ist es, beim Eintrag einer neuen Zeile in eine Tabelle die ZeilenID der neu angelegten Zeile zurück zu bekommen, um anschließend mit dieser ID ein Update durchzuführen und dabei die restlichen Spalten zu füllen.

Ein Kollege hat herausgefunden, daß MySQL bei einem solchen Eintrag eine Lokale Variable namens "@@identity" anlegt, so daß der SQL-String wie folgt aussehen könnte:

INSERT INTO tabname (Spalte1, Spalte2,...) VALUES (Wert1,Wert2,...); SELECT @@identity.

Getestet haben wir das für die MySQL-Datenbank über das Programm "Navicat" und dort bekomme ich die Zeilennummer zurück.

Rufe ich eine solche Anweisung über die LabVIEW-Funktionen auf, erhalte ich eine Fehlermeldung vom ODBC-Treiber (für MySQL)
"... You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '; select @@identity' at line 1. in Conn Execute.vi"

Ähnliches passiert auch bei der SQLite-Datenbank. Da erhalte ich beim Aufruf von LabVIEW aus:
"Exception occured in Microsoft OLE DB Provider for ODBC Drivers, only one SQL statement allowed. in Conn Execute.vi"

Scheinbar bin ich da sowieso auf dem Holzweg, denn wenn ich das mit einem anderen Programm, wie z.B. "SQLiteSpy" ausprobiere, erhalte ich die Fehlermeldung "unrecognized token '@'"; lösche ich ein "@", kommt keine Fehlermeldung, aber auch kein Ergebnis, weil SQLite wahrscheinlich die Variable "identity" nicht kennt.

Kann mir jemand sagen, wie ich über LabVIEW zwei durch Semikolon getrennte Anweisungen übertragen kann, ohne, daß ein Fehler entsteht und wie bei SQLite die Variable heist, mit der die ID der eingefügten Zeile zurückgeliefert wird?

Oder gibt es eine ganz andere Möglichkeit? Wichtig ist nur, daß wirklich die ZeilenID zurückgeliefert wird, die zum entsprechenden INSERT-Befehl gehört, da verschiedene Nutzer quasi zeitgleich drauf zugreifen könnten.
Schließlich soll das Update ja im passenden Datensatz durchgeführt werden.

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2006, 10:18
Beitrag #2

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
ZeilenID bei "Insert" mit LabVIEW-DB-Toolkit zurückholen
' schrieb:INSERT INTO tabname (Spalte1, Spalte2,...) VALUES (Wert1,Wert2,...); SELECT @@identity.

Getestet haben wir das für die MySQL-Datenbank über das Programm "Navicat" und dort bekomme ich die Zeilennummer zurück.

Rufe ich eine solche Anweisung über die LabVIEW-Funktionen auf, erhalte ich eine Fehlermeldung vom ODBC-Treiber (für MySQL)
"... You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '; select @@identity' at line 1. in Conn Execute.vi"

leider kann man mittels ADO immer nur ein SQL-Statement schicken, darum kommt es zu der Fehlermeldung, wenn du versuchst das SELECT @@identity an das erste Statement dranzuhängen. Das NI-DB-Toolkit kann das nicht verarbeiten, da es intern auch "nur" mit ADO arbeitet.

Du hast mehrere Möglichkeiten das zu umgehen:
1. Du programmierst deine DB Funktionalität so um, dass du sicher stellst, dass auf das INSERT immer sofort das SELECT @@identity folgt.

2. könnte es sein, dass MySQL die identity pro user anlegt? Da bin ich mir nicht sicher, aber ich könnte mir vorstellen, dass die Entwickler von MySQL genau diesen Fall vorhergesehen haben und entsprechende Vorkehrungen getroffen haben

3. Du programmierst dein Insert als Stored Procedure, die dir das Ergebnis der Einfügeoperation zurückliefert

WERBUNG: hast du dir schon mal DAS HIER angeschaut?Wink

Grüße
CB

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Erfahrungen Labview database connectivity toolkit Cardinal1664 2 5.619 11.10.2016 15:13
Letzter Beitrag: Cardinal1664
  insert data auf fetch recordset data ColdducK 9 7.802 23.12.2011 11:04
Letzter Beitrag: ColdducK
  LabVIEW Database Connectivity Toolkit nookie 3 6.260 04.11.2009 14:52
Letzter Beitrag: nookie

Gehe zu: