Announcement

Collapse
No announcement yet.

PK Constraint Verletzung bei Update!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PK Constraint Verletzung bei Update!

    Hallo Leute!

    Ich bastle momentan einen Konverter, der eine MDB-Datei ausließt und diese - angepasst auf ein neues Schema - in einen MSSQl-Server schieben soll. Jedoch klappt das nicht ganz so, wie ich es mir erhofft hatte. Die Daten hole ich mir gesagt aus einer MDB und schreibe sie über schleifen in ein leeres DataSet. Diese Änderungen will ich dann mittels der Update-Befehle auf eine leere SQL-DB schicken. Sobald ich aber mit meiner Konvertierung fertig bin und die Updatemethode aufrufe erhalte ich die Exception :

    "Verletzung der PRIMARY-KEY-Einschränkung 'PK_tblxx_Schulungart'. Ein doppelter Schlüssel kann in das 'dbo.tblxx_Schulungart'-Object nicht eingefügt werden.


    die DataTable ist folgendermaßen aufgebaut :
    Spalte 1 : 'ID' int32, primary key , unique, not null
    Spalte 2: 'Schulungsart' varchar(255), null

    Gefüllt wird die Tabelle mit folgender Methode:

    Code:
     Public Sub convertXxSchulungsArt()
            Dim currentId As Integer = 1 'Da in der alten MDB keine PK's gesetzt waren muessen wir welche erfinden
    
            Me.SqlServer.tblxx_SchulungArt.Rows.Clear() 'alles leer machen...
    
            For Each dRow As DataRow In Me.AdressWeb.Adm_Schulungsart
                Dim newRow As DataRow = Me.SqlServer.tblxx_SchulungArt.NewRow()
    
                newRow.Item("ID") = currentId 'neue ID setzen
                newRow.Item("Schulungsart") = dRow.Item("Schulungsart")
    
                currentId = currentId + 1 'ID erhoehen
    
                Me.SqlServer.tblxx_SchulungArt.Rows.Add(newRow) 'hinzufuegen
            Next
    
        End Sub
    Bevor ich jedoch den Update aufrufe leere ich die Tabelle auf dem MSSQL vollständig. Eigentlich kann also garnichtsmehr darinstehen. Habe aber auch nachgeschaut und die Tabellen sind wirklich leer.

    Der Inhalt der Tabelle nach der Konvertierung ist folgendermaßen:

    Code:
    1 | ACCESS <-- Hier wird im DGV sogar ein DataError angezeigt ( spalte schonmal vorhanden, hallo?? ) 
    2 | COLUMBUS
    3 | JAGD
    4 | FRIEDHOF
    5 | INCAT-1
    6 | INCAT-2
    7 | INCAT-3
    8 | SQL

    Hat jemand von euch eine Idee, woran der Fehler liegen könnte? Bin gerade echt mit meinem Latein am Ende.

    Bin für jede Antwort mehr als dankbar!!

  • #2
    Hallo!

    Hast du schon mal versucht einen neuen Datensatz manuell im SQL Server einzufuegen? Ich glaube naemlich (muss jetzt nicht stimmen, bin mir aber fast sicher), dass der SQL Server sich die ID's merkt und sobald diese schon mal verwendet wurden, kannst du sie nicht mehr vergeben (ausser mit speziellen Commands).

    Probiers mal mit manuellem Insert und dann vielleicht mit sowas wie 'SELECT ISNULL(MAX(ID), 0) + 1 FROM ...'

    HTH
    *-- robert.oh. --*

    Comment


    • #3
      Hallo!

      Danke für Deine Antwort.

      Code:
      Use verwaltung;
      INSERT INTO tblxx_SchulungArt (ID,Schulungsart) VALUES (1,'bla');
      
      (1 Zeile(n) betroffen)
      Scheint es "leider" nicht gewesen zu sein .

      Comment

      Working...
      X