2016-05-06 25 views
1

我有一個學校項目,我需要將數據添加到3個相互關聯的表中。我的問題是主鍵與另一個關聯,我收到一個錯誤。附加信息:您無法添加或更改記錄,因爲表中需要相關記錄'tblRubriek'

這是我的代碼我跑

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 

VerkopenCommArtikel.ExecuteNonQuery()我是否收到此錯誤

類型 'System.Data.OleDb.OleDbException' 的異常出現在System.Data .dll但未在用戶代碼中處理

其他信息:由於表'tblRubriek'中需要相關記錄,因此無法添加或更改記錄。

This is my Database

+0

如果數據庫在父表中生成PK,那麼您需要在保存該數據庫之前檢索該數據並將其放入子表中。在這裏看到我的指南:http://www.vbforums.com/showthread.php?659052-Retrieve-Access-AutoNumber-Value-After-Insert&highlight= – jmcilhinney

+0

@jmcilhinney謝謝你!我想我已經設法解決這個問題,但現在我遇到了這個問題。 –

+0

在嘗試轉換爲'Integer'之前,您可能需要首先檢查ExecuteScalar是否返回了'DBNull',如果查詢沒有返回任何行,則可能發生這種情況。 –

回答

1

您正在使用

intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar) 

檢索intRubriekID價值後,你已經設置的參數值

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

您需要執行SELECT查詢首先,然後設置參數值爲INSERT INTO tblArtikel查詢,然後執行它。

+0

我已經改變了順序,所以現在我得到:值不能爲空在 'intGebruikersID = Integer.Parse(GebruikersIDComm.ExecuteScalar)' –

+0

我執行的順序錯了,我設法修復順序和代碼現在工作正常,謝謝你的幫助! –

+0

不客氣。請記住我所說的啓用「Option Strict」。我建議你調整你的Visual Studio配置,使其成爲所有新的VB.NET項目的默認值。這真是個好主意。 –

相關問題