Hallo zusammen, ich habe hier ein sehr kurioses Problem das ich nicht so wirklich verstehe.
Ich soll ein Programm das mit Mysql arbeitet und unter VB6 entwickelt wurde um einige Funktionen erweitern. Da wer immer dieses Programm allerdings geschrieben hat scheinbar noch nie davon gehört hat wie man Relationen richtig setzt sind die Daten Teilweise inkonsistent und Teilweise wurden Stingwerte als Identifizirungsmerkmale eingesetzt. Desshalb habe ich beschlossen das Programm von grund auf neu zu schreiben und bei der Gelegenheit auch die Daten gleich zu bereinigen. Also habe ich auf einem MSSQL ein neues Datenmodel erstellt und beginne damit die Daten Datensatz für datensatz auf konsistenz zu prüfen und dann in meine neue DB einzufügen.
So viel zum Hintergrund.
Bei dieser Arbeit bin ich auf ein sehr merkwürdiges Phänomen getroffen, dass ich mir nicht erklären kann. Ich habe hier 2 Basistabellen. Stellen / Faehigkeiten und eine Tabelle die eine fremdschlüsselbeziehung zu beiden Basistabellen hat.
Ich arbeite also die alte Tabelle die bis auf die Relationen genau so aufgebaut ist durch und kopiere die Datensätze und bekomme dann Folgenden Fehler:
Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung 'FK_stellen_faehig_Stellen'. Der Konflikt trat in der qualimatrix-Datenbank, Tabelle 'dbo.Stellen', column 'ID' auf. Die Anweisung wurde beendet.
Der Fehler ist soweit klar. in der Tabelle stellen gib es offensichtlich keinen Datensatz dessen ID passt. Aber genau da liegt der Knackpunkt. Den Datensatz gibt es.
Ich habe mit also im Debugmodus angesehen welche Variablenwerte in die Datenbank geschrieben werden sollen und mit den Basistabellen verglichen. Die Datensätze sind definitiv da.
Also habe ich meinen Code in 2 verschiedene Prozeduren aufgesplittet Prozedur 1 enthält die schleife und übergibt dann die Daten immer an Prozedur 2 die diese dann in die Datenbank schreiben soll. Das ganze sieht wie folgt aus
Prozedur 1:
Prozedur 2:
Natürlich bekomme ich beim ausführen wieder die gleiche Fehlermeldung. Aber komischerweise Kommt der Fehler nicht wenn ich die gleichen Daten die ich mir vorher im Debugmode aufgeschrieben habe direkt an Prozedur 2 übergebe und die Daten werden korrekt in die Datenbank geschrieben.
Kann mir das irgendjemand erklären?
Hier die Prozedur die funktioniert:
Die beiden Integerwerte werden auch genau si in der schleife übergeben und lösen den Fehler aus.
Ich soll ein Programm das mit Mysql arbeitet und unter VB6 entwickelt wurde um einige Funktionen erweitern. Da wer immer dieses Programm allerdings geschrieben hat scheinbar noch nie davon gehört hat wie man Relationen richtig setzt sind die Daten Teilweise inkonsistent und Teilweise wurden Stingwerte als Identifizirungsmerkmale eingesetzt. Desshalb habe ich beschlossen das Programm von grund auf neu zu schreiben und bei der Gelegenheit auch die Daten gleich zu bereinigen. Also habe ich auf einem MSSQL ein neues Datenmodel erstellt und beginne damit die Daten Datensatz für datensatz auf konsistenz zu prüfen und dann in meine neue DB einzufügen.
So viel zum Hintergrund.
Bei dieser Arbeit bin ich auf ein sehr merkwürdiges Phänomen getroffen, dass ich mir nicht erklären kann. Ich habe hier 2 Basistabellen. Stellen / Faehigkeiten und eine Tabelle die eine fremdschlüsselbeziehung zu beiden Basistabellen hat.
Ich arbeite also die alte Tabelle die bis auf die Relationen genau so aufgebaut ist durch und kopiere die Datensätze und bekomme dann Folgenden Fehler:
Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung 'FK_stellen_faehig_Stellen'. Der Konflikt trat in der qualimatrix-Datenbank, Tabelle 'dbo.Stellen', column 'ID' auf. Die Anweisung wurde beendet.
Der Fehler ist soweit klar. in der Tabelle stellen gib es offensichtlich keinen Datensatz dessen ID passt. Aber genau da liegt der Knackpunkt. Den Datensatz gibt es.
Ich habe mit also im Debugmodus angesehen welche Variablenwerte in die Datenbank geschrieben werden sollen und mit den Basistabellen verglichen. Die Datensätze sind definitiv da.
Also habe ich meinen Code in 2 verschiedene Prozeduren aufgesplittet Prozedur 1 enthält die schleife und übergibt dann die Daten immer an Prozedur 2 die diese dann in die Datenbank schreiben soll. Das ganze sieht wie folgt aus
Prozedur 1:
Prozedur 2:
VB.NET-Quellcode
- Private Sub stellenFaeeinfügen(ByVal stellenid As Integer, ByVal FaeID As Integer)
- Dim ta As New qualimatrixDataSetTableAdapters.stellen_faehigTableAdapter
- Dim dr As qualimatrixDataSet.stellen_faehigRow
- dr = dsneu.stellen_faehig.Newstellen_faehigRow
- dr.StellenID = stellenid
- dr.FaehigkeitID = FaeID
- dsneu.stellen_faehig.Rows.Add(dr)
- ta.Update(dsneu.stellen_faehig)
- End Sub
Natürlich bekomme ich beim ausführen wieder die gleiche Fehlermeldung. Aber komischerweise Kommt der Fehler nicht wenn ich die gleichen Daten die ich mir vorher im Debugmode aufgeschrieben habe direkt an Prozedur 2 übergebe und die Daten werden korrekt in die Datenbank geschrieben.
Kann mir das irgendjemand erklären?
Hier die Prozedur die funktioniert:
Die beiden Integerwerte werden auch genau si in der schleife übergeben und lösen den Fehler aus.