Ich habe ein Schulprojekt und ich muss Daten zu 3 Tabellen hinzufügen, die miteinander verwandt sind. Mein Problem ist, dass der Primärschlüssel mit dem anderen verknüpft ist und ich einen Fehler erhalte.Zusätzliche Informationen: Sie können einen Datensatz nicht hinzufügen oder ändern, weil ein verwandter Datensatz in Tabelle 'tblRubriek' erforderlich ist.
Dies ist mein Code, den ich laufen bin
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
Bei VerkopenCommArtikel.ExecuteNonQuery()
Muss ich diesen Fehler empfangen
Eine Ausnahme vom Typ 'System.Data.OleDb.OleDbException' aufgetreten in System.Data .dll wurde aber nicht im Benutzercode behandelt
Weitere Informationen: Sie können einen Datensatz nicht hinzufügen oder ändern, da ein zugehöriger Datensatz in der Tabelle 'tblRubriek' erforderlich ist.
Wenn die PK in der übergeordneten Tabelle von der Datenbank generiert wird, müssen Sie diese in der untergeordneten Tabelle abrufen, bevor Sie sie speichern. Siehe meinen Leitfaden dazu hier: http://www.vbforums.com/showthread.php?659052-Retrieve-Access-AutoNumber-Value-After-Insert&highlight= – jmcilhinney
@jmcilhinney danke! Ich denke, ich habe es bereits geschafft, dieses Problem zu lösen, aber jetzt stieß ich auf dieses Problem. –
Bevor Sie versuchen, in 'Integer' zu konvertieren, müssen Sie möglicherweise zuerst prüfen, ob 'ExecuteScalar'' DBNull' zurückgegeben hat, was passieren könnte, wenn die Abfrage keine Zeilen zurückgibt. –