Thimo Demey Thimo Demey - 7 months ago 38
Vb.net Question

Additional information: You cannot add or change a record because a related record is required in table 'tblRubriek'

I have a schoolproject and I need to add data to 3 tables that are related to each other. My problem is that the primary key is related with the other and I recieve an error.

This is my code i'm running

Protected Sub bntVerzenden_Click(sender As Object, e As EventArgs) Handles bntVerzenden.Click


Dim intGebruikersID, intRubriekID As Integer
Dim VerkopenConn As New OleDb.OleDbConnection
Dim VerkopenCommArtikel, VerkopenCommGebruiker, GebruikersIDComm, RubriekIDComm As New OleDb.OleDbCommand


VerkopenConn.ConnectionString = My.Settings.SvShopConnection
VerkopenCommArtikel.Connection = VerkopenConn
VerkopenCommGebruiker.Connection = VerkopenConn
GebruikersIDComm.Connection = VerkopenConn
RubriekIDComm.Connection = VerkopenConn


'Gebruiker gegevens aan de database toevoegen
VerkopenCommGebruiker.CommandText = "INSERT INTO tblGebruiker (GebruikersNaam, GebruikersVoornaam, GebruikersEmail, GebruikersGSM) VALUES (@GebruikersNaam, @GebruikersVoornaam, @GebruikersEmail, @GebruikersGSM)"

VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersNaam", txtNaam.Text)
VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersVoornaam", txtVNaam.Text)
VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersEmail", txtEmail.Text)
VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersGSM", txtGsm.Text)


'GebruikersID uit de database halen
GebruikersIDComm.CommandText = "SELECT tblGebruiker.GebruikersID FROM tblGebruiker WHERE tblGebruiker.GebruikersNaam = @Naam AND tblGebruiker.GebruikersVoornaam = @VNaam;"

GebruikersIDComm.Parameters.AddWithValue("@Naam", txtNaam.Text)
GebruikersIDComm.Parameters.AddWithValue("@VNaam", txtVNaam.Text)

'RubriekID uit de database halen
RubriekIDComm.CommandText = "SELECT tblRubriek.RubriekID FROM tblRubriek WHERE tblRubriek.RubriekNaam = @RubriekNaam"

RubriekIDComm.Parameters.AddWithValue("@RubriekNaam", lstRubriek.SelectedItem.ToString)


'Artikel gegevens aan de database toevoegen
VerkopenCommArtikel.CommandText = "INSERT INTO tblArtikel (ArtikelBeschrijving, ArtikelPrijs, RubriekID, ArtikelAankoopdatum, ArtikelTekoopgezet, ArtikelBeschikbaar, GebruikersID) VALUES ( @ArtikelBeschrijving, @ArtikelPrijs, @RubriekID, @ArtikelAankoopdatum, @ArtikelTekoopgezet, @ArtikelBeschikbaar, @GebruikersID)"

VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschrijving", txtArtikelBeschrijving.Text)
VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelPrijs", txtArtikelPrijs.Text)
VerkopenCommArtikel.Parameters.AddWithValue("@RubriekID", intRubriekID)
VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelAankoopdatum", CalAankoop.SelectedDate)
VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelTekoopgezet", calVerkoop.SelectedDate)
VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschikbaar", True)
VerkopenCommArtikel.Parameters.AddWithValue("@GebruikersID", intGebruikersID)

If VerkopenConn.State = ConnectionState.Closed Then VerkopenConn.Open()
VerkopenCommGebruiker.ExecuteNonQuery()
intGebruikersID = Integer.Parse(GebruikersIDComm.ExecuteScalar)



intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar)



VerkopenCommArtikel.ExecuteNonQuery()






End Sub


At
VerkopenCommArtikel.ExecuteNonQuery()
Do I recieve this error


An exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll but was not handled in user code

Additional information: You cannot add or change a record because a related record is required in table 'tblRubriek'.


This is my Database

Answer

You are using

intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar)

to retrieve the intRubriekID value after you have already set the Parameter value

VerkopenCommArtikel.Parameters.AddWithValue("@RubriekID", intRubriekID)

You need to execute the SELECT query first, then set the Parameter value for the INSERT INTO tblArtikel query, and then execute it.