簡體   English   中英

VB.Net/Access SQL插入子查詢問題

[英]VB.Net/Access SQL insertion sub query issue

我正在制作一個可以填寫的表格,並將通過按鈕執行插入查詢。 我不知道如何在此代碼塊中引用另一個表。 我正在嘗試在表單中插入名稱,電話號碼和電子郵件以及相應的分銷商ID。 獲取分發服務器ID的唯一方法是引用分發服務器表。 有人有想法么? 謝謝!

私有子Button1_Click(作為對象發送,作為EventArgs發送)處理Button1.Click

    provider = 0
    dataFile = 0
    provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    dataFile = "XXXXXXX.mdb"
    connString = provider & dataFile
    myConnection.ConnectionString = connString
    myConnection.Open()

    '*THIS IS THE PROBLEM AREA*'
    Dim str As String
    str = "INSERT INTO [Distributor Contact] ([Name], [Phone Number], [Email], [Distributor ID]) VALUES(?,?,?,?) WHERE [Distributor ID] IN (SELECT DISTINCT [Distributor ID] FROM [Distributor] WHERE [Distributor Name]= '" & ComboBox_Dist.SelectedItem.ToString() & "'))"

    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    cmd.Parameters.Add(New OleDbParameter("Name", CType(TextBox2.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Phone Number", CType(TextBox3.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Email", CType(TextBox4.Text, String)))
    Me.Refresh()

    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        myConnection.Close()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()

        MsgBox("Contact Added")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    myConnection.Close()

    'RE-POPULATE COMBOBOX
    ComboBox_Dist.Items.Clear()
    Dim connString1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= XXXXXXXXX.mdb"
    Dim con As OleDbConnection = New OleDbConnection(connString1)
    Dim adapter As OleDbDataAdapter
    Dim cmd2 As OleDbCommand
    Dim dt As DataTable = New DataTable()

    Dim sql As String = "SELECT * FROM [Distributor Contact];"

    cmd2 = New OleDbCommand(sql, con)

    Try
        con.Open()
        adapter = New OleDbDataAdapter(cmd2)

        adapter.Fill(dt)

        'Add Items To ComboBox
        For Each row In dt.Rows
            ComboBox_Dist.Items.Add(row(1))
        Next
        con.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
        con.Close()
    End Try
End Sub

將ComboBox_Dist添加為參數,然后對您的插入查詢使用“選擇”而不是“值”。 該選擇允許您引用分發服務器表。

cmd.Parameters.Add(New OleDbParameter("Email", CType(TextBox4.Text, String)))
cmd.Parameters.Add(New OleDbParameter("DistributorName", ComboBox_Dist.SelectedItem.ToString()))

str = "INSERT INTO [Distributor Contact] ([Name], [Phone Number], [Email], [Distributor ID]) "
str += "SELECT ?,?,?, [Distributor].[DistributorID] "
str += "FROM [Distributor] WHERE [Distributor].[Distributor Name] = ?"

這是將來任何人的最終工作代碼。

    provider = 0
    dataFile = 0
    provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    dataFile = "XXXXXXXX.mdb"
    connString = provider & dataFile
    Dim str As String
    str = "INSERT INTO [Distributor Contact] ([Contact Name], [Phone Number], [Email], [Distributor ID])"
    str += "SELECT ?,?,?,[Distributor].[Distributor ID]"
    str += "FROM [Distributor] WHERE [Distributor].[Distributor Name] = ?"

    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    cmd.Parameters.Add(New OleDbParameter("Contact Name", CType(TextBox2.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Phone Number", CType(TextBox3.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Email", CType(TextBox4.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Distributor Name", ComboBox_Dist.SelectedItem.ToString()))

    Me.Refresh()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM