11.09.2017, 07:57
Beitrag #2
|
|
|
11.09.2017, 08:00
Beitrag #3
|
Appa
LVF-Grünschnabel
Beiträge: 40
Registriert seit: Mar 2015
2017
2014
DE
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
(11.09.2017 07:57 )Freddy schrieb: Hallo Appa,
so ein ähnliches Problem habe ich mit einer Tabelle in der nur ein Datensatz steht, gelöst.
Der zugreift inkrementiert den Datensatz. Damit hat man eine eineindeutige Zahl die man als Index verwenden kann.
Gruß
Freddy
Hi Freddy,
kann dir gerade nicht ganz Folgen
|
|
|
11.09.2017, 08:10
Beitrag #4
|
|
|
11.09.2017, 08:12
(Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2017 08:15 von jg.)
Beitrag #5
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
Das ist doch gar kein Problem. Es gibt SQL-Kommandos, mit denen du Verbindungsspezifisch den letzten erzeugten AutoIndex abfragen kannst.
Bei MySQL lautet die entsprechende Abfrage z.B.
Code:
SELECT LAST_INSERT_ID();
Bei MS-SQL funktionieren
Code:
SELECT @@IDENTITY; ## oder
SELECT SCOPE_IDENTITY();
Also keine Klimmzüge, Tabelle mit AutoIncrement-Spalte erstellen, Bilder eintragen (ohne selber den AutoIndex zu erzeugen), und einfach korrekt nach dem Eintrag die erzeugte ID abfragen.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
11.09.2017, 08:26
(Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2017 08:29 von Appa.)
Beitrag #6
|
Appa
LVF-Grünschnabel
Beiträge: 40
Registriert seit: Mar 2015
2017
2014
DE
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
(11.09.2017 08:10 )Freddy schrieb: in Deiner SQL Datenbank eine Tabelle "Indexzaehler" mit einer Spalte "Zahl" erstellen.
Datensatz Zahl lesen und Zahl +1 Datensatz überschreiben.
Die gelesene Zahl als Index für Deine Tabelle verwenden.
Gruß
Freddy
Hi Freddy,
das mache ich bisher eigentlich genau so! Nur wenn beide das gleichzeitig ausführen komme ich wieder auf das gleiche Problem
(11.09.2017 08:12 )jg schrieb: Das ist doch gar kein Problem. Es gibt SQL-Kommandos, mit denen du Verbindungsspezifisch den letzten erzeugten AutoIndex abfragen kannst.
Bei MySQL lautet die entsprechende Abfrage z.B.
Code:
SELECT LAST_INSERT_ID();
Bei MS-SQL funktionieren
Code:
SELECT @@IDENTITY; ## oder
SELECT SCOPE_IDENTITY();
Also keine Klimmzüge, Tabelle mit AutoIncrement-Spalte erstellen, Bilder eintragen (ohne selber den AutoIndex zu erzeugen), und einfach korrekt nach dem Eintrag die erzeugte ID abfragen.
Gruß, Jens
Auch hier glaube ich nicht dass das fehlerfrei funktionieren wird. Wie gesagt wenn das Simultan läuft gäbe es die Möglichkeit das beide die gleiche Zahl abrufen. Also PC1 schreibt 233 PC2 schreibt 234 und PC1 Holt die jüngsten Daten um das Bild zu erstellen und bekommt 234 zurück wie PC2 dann auch...
Oder wie es jetzt ist.
PC1 lädt Max Wert/letzten Wert "232" inkrementiert um 1 und erstellt "233" mit Bild "233", PC2 hat währenddessen ebenfalls Max Wert geladen "232" um 1 inkrementiert und erstellt "233" mit Bild "233".
Ich denke nur wenn ich ein Flaschenhals im Stil von einem Übergabeprogramm oder eine Art reservierung bis Bild Erstellt hinbekomme, passiert dieser Fehler nicht mehr.
Dazu möchte ich es verhindern einen SQL Autoinkrement zu benutzen... Ich müsste verdammt viel umschreiben bzw. alles neu schreiben. Ich nutze manchmal einen negativ Inkrement um diverse Einträge später zu selektieren.
grüße Appa
|
|
|
11.09.2017, 08:36
Beitrag #7
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
(11.09.2017 08:26 )Appa schrieb: Auch hier glaube ich nicht dass das fehlerfrei funktionieren wird. Wie gesagt wenn das Simultan läuft gäbe es die Möglichkeit das beide die gleiche Zahl abrufen. Also PC1 schreibt 233 PC2 schreibt 234 und PC1 Holt die jüngsten Daten um das Bild zu erstellen und bekommt 234 zurück wie PC2 dann auch...
Oder wie es jetzt ist.
Doch, das funktioniert! Diese Abfragen sind Instanz-Spezifisch, d.h. sie geben für die jeweilige Datenbank-Verbindung den letzten erzeugten AutoIndex zurück. PC1 wird bei dieser Abfrage also 233, PC2 wird 234 zurückbekommen. So schlau sind die Datenbank-Engines.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
11.09.2017, 08:41
Beitrag #8
|
Freddy
Oldtimer
Beiträge: 729
Registriert seit: Aug 2008
2019, 2020, 2021
1996
DE
76275
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
Ich hab mal bei Microsoft nachgelesen.
Parallelitätskontrolltypen
Das könnte Dich interessieren.
Gruß
Freddy
|
|
|
11.09.2017, 08:56
Beitrag #9
|
Appa
LVF-Grünschnabel
Beiträge: 40
Registriert seit: Mar 2015
2017
2014
DE
Deutschland
|
RE: Kommunikation zwischen Programmen/SQL
(11.09.2017 08:36 )jg schrieb: (11.09.2017 08:26 )Appa schrieb: Auch hier glaube ich nicht dass das fehlerfrei funktionieren wird. Wie gesagt wenn das Simultan läuft gäbe es die Möglichkeit das beide die gleiche Zahl abrufen. Also PC1 schreibt 233 PC2 schreibt 234 und PC1 Holt die jüngsten Daten um das Bild zu erstellen und bekommt 234 zurück wie PC2 dann auch...
Oder wie es jetzt ist.
Doch, das funktioniert! Diese Abfragen sind Instanz-Spezifisch, d.h. sie geben für die jeweilige Datenbank-Verbindung den letzten erzeugten AutoIndex zurück. PC1 wird bei dieser Abfrage also 233, PC2 wird 234 zurückbekommen. So schlau sind die Datenbank-Engines.
Gruß, Jens
Hi Jens,
ahh jetzt versteh ich! Da hab ich einfach mal SQL unterschätzt. Dann mach ich mich gleich mal ans Werk, dank dir!
grüße Appa
|
|
|
| |