2016-05-06 7 views
1

私は学校プロジェクトを持っており、互いに関係のある3つのテーブルにデータを追加する必要があります。私の問題は、プライマリキーが他のキーと関連しており、エラーが発生していることです。追加情報: 'tblRubriek'テーブルに関連するレコードが必要なため、レコードを追加または変更できません

これは私が、私はこのエラー

型 'System.Data.OleDb.OleDbException' の例外が発生したSystem.Dataに受け取るかVerkopenCommArtikel.ExecuteNonQuery()

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 

を実行している私のコードです.dllはユーザーコードで処理されませんでした。

追加情報: 'tblRubriek'テーブルに関連するレコードが必要なため、レコードを追加または変更することはできません。すでに設定されている後にあなたがintRubriekID値を取得するパラメータ値

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

intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar) 

を使用している

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

あなたはSELECTクエリを実行する必要があります最初に、パラメータ値を設定しますINSERT INTO tblArtikelクエリの場合は、それを実行します。

+0

私は順序を変更した、今私が手:値が間違っている、私は順序を修正するために管理および実行の 'intGebruikersID = Integer.Parse(GebruikersIDComm.ExecuteScalar)' –

+0

私のためではNULLにすることはできませんコードがうまくいきました。ありがとうございました! –

+0

あなたは大歓迎です。 'Option Strict'を有効にすることについて私が言ったことを覚えていてください。 Visual Studioの設定を微調整して、すべての新しいVB.NETプロジェクトのデフォルトにすることをお勧めします。それは本当に良いアイデアです。 –

関連する問題