Avatar billede argo Nybegynder
17. marts 2006 - 15:50 Der er 2 kommentarer og
1 løsning

primærnøgle og . fremmednøgle

Jeg har 2 tabeler hhv. Medlem og Uddannelse. Medlem tabelen har en primærnøgle som autonum og skal være fremmednøgle for uddannelse. Jeg bruger MSDE som database, men når jeg prøve at indtaste noget gennem via et form komme dette besked "conflict occurred in database 'folk', table 'Medlem', column 'MedNr'. The statement has been terminated", Jeg prøvet lidt af hvert kan ikke få til at virke. Jeg kan godt indætte/slette værdier i 2 tabeller hver for sig men ikke når jeg har tilføjet fremmednøglen og kalde opret(). For at belyse problematiken, her er noget af koden til det. Det skal siges at jeg har begrænset programmerings kendskab. Er det nogen som kan sig, hvor kan det ligger fejlen..?

Private con As SqlConnection
Private sqlOpret As SqlCommand   
Private OpretMedlemNr As New SqlParameter("@MedNr", SqlDbType.BigInt)
Private opretMedlemNavn As New SqlParameter("@MedNavn", SqlDbType.VarChar, 50)
Private opretMedlemAdr As New SqlParameter("@MedAdr", SqlDbType.VarChar, 50)
    Public Sub New()
        _MedNr = 0
        _MedNavn = ""
con = New SqlConnection("server=localhost; uid=sa; pwd=admin;
database=folk")
sqlOpret = New SqlCommand("INSERT into Medlem values (@MedNavn, @MedAdr, @MedPostNr)", con)
        sqlHent.Parameters.Add(OpretMedlemNr)
        sqlOpret.Parameters.Add(opretMedlemNavn)
    End Sub
    Private _MedNr As integer
    Private _MedNavn As String
        Public Property MedNr() As Integer
        Get
            Return _MedNr
        End Get
        Set(ByVal Value As Integer)
            _MedNr = Value
        End Set
    End Property
    Public Property MedNavn() As String
        Get
            Return _MedNavn
        End Get
        Set(ByVal Value As String)
            _MedNavn = Value
        End Set
    End Property
    Public Sub Opret()       
        opretMedlemNavn.Value = MedNavn
        opretMedlemAdr.Value = MedAdr
        con.Open()
        sqlOpret.ExecuteNonQuery()
        con.Close()
    End Sub
End Class
ClassUddannelse
Imports System.Data.SqlClient
Public Class uddannelse

Private con As SqlConnection   
Private sqlOpret As SqlCommand

Private opretUddannelseNr As New SqlParameter("@UddanNr", SqlDbType.BigInt) 
    Private opretMedlemNr As New SqlParameter("@MedNr", SqlDbType.BigInt)
    Private opretUddan1Navn As New SqlParameter("@uddan1Navn", SqlDbType.VarChar, 50)
    Public Sub New()
        _UddanNr = 1
        _MedNr = 1
        _Uddan1Navn = ""
        con = New SqlConnection("server=localhost; uid=sa; pwd=admin;
database=folk")
        sqlHent = New SqlCommand("select * from uddannelse where
UddanNr = @UddanNr", con)
        sqlOpret = New SqlCommand("INSERT into Uddannelse values (
@MedNr,@Uddan1Navn)", con)
        sqlHent.Parameters.Add(opretUddannelseNr)
        sqlOpret.Parameters.Add(opretMedlemNr)
        sqlOpret.Parameters.Add(opretUddan1Navn)
    End Sub
    Private _UddanNr As Integer
    Private _MedNr As integer
    Private _Uddan1Navn As String
    Public ReadOnly Property UddanNr() As Integer
        Get
            Return _UddanNr
        End Get
    End Property
    Public Property MedNr() As Integer
        Get
            Return _MedNr
        End Get
        Set(ByVal Value As Integer)
            _MedNr = Value
        End Set
    End Property
    Public Property Uddan1Navn() As String
        Get
            Return _Uddan1Navn
        End Get
        Set(ByVal Value As String)
            _Uddan1Navn = Value
        End Set
    End Property
    Public Sub Opret()
        opretMedlemNr.Value = MedNr
        opretUddan1Navn.Value = Uddan1Navn
        con.Open()
        sqlRet.ExecuteNonQuery()
        con.Close()
    End Sub
End Class
Avatar billede erikjacobsen Ekspert
17. marts 2006 - 16:35 #1
Hvis du har en fremmednøgle i en tabel, skal den anden tabel indeholde dens værdi, før du får lov til at oprette posten. Er det derfor?
Avatar billede softtail Nybegynder
18. marts 2006 - 17:42 #2
Du skal oprette posten til medlem før du opretter posten til uddannelse i databasen.

Ellers skal du kontrollere, at MedNr findes som primærnøgle i tabellen Medlem, når du bruger værdien som fremmednøgle den nye post i tabellen Uddannelse.
Avatar billede argo Nybegynder
20. marts 2006 - 23:50 #3
lukker spørgsmålet, Jeg har fået vide at det skal laves både en INSERT og en SELECT i samme kald til databasen. Der er en speciel variabel i MSSQL server der returnerer den sidst oprettede primærnøgleværdi. Den variabel hedder @@IDENTITY og har lavet en funktion i stedet opret subén, som returnere den nye primær nøgle samt at bruge ExecuteScalar() metoden, men tak for kommnerarene..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester