2014-05-01 39 views
-1

我在VB.net &數據庫有問題,這是在向表中插入數據時,我需要插入外鍵值而不是鍵本身。插入外鍵ID的值而不是ID

例如我有兩個表:員工,部門。

以下模型

Department (DepID pk, DepName) 
Employee (EmpID pk, EmpName, DepID fk) 

使用VB的winform將數據插入到員工,

我需要插入(或組合選擇)的DepName在DEPID的地方...。

NB1:我可以如此輕鬆地使用列計數的MS Access窗體&寬度。

NB2:我可以選擇的數據這樣,但我說的操作數據,如插入,更新,刪除...

+0

像Dept CBO這樣的控件可以綁定到數據源,然後DisplayMember和ValueMember用於控制顯示的內容和所選項目的值。 – Plutonix

+0

這隻適用於我只希望此值獨立於 但在我的情況下,我插入相關值 –

+0

並根據建模與關係,員工表中的數據類型od DepID是數字,而不是文本。 –

回答

0

What is needed, is to allow the user to choose the DepName when inserting new Employee.. and not the ID
這是正是您使用從綁定控件獲得的功能ValueMemberDisplayMember

Dim SQL As String = "Select * FROM Department ORDER BY DeptName" 
    Using cmd As New OleDbCommand(Sql, dbCon) 
     myDS = New DataSet("Dept") 
     Dim da As New OleDbDataAdapter(cmd) 
     da.Fill(myDS, "Dept") 

     frmM.cboDept.DisplayMember = "DeptName" ' what to SHOW 
     frmM.cboDept.ValueMember = "DeptID"  ' value to track 
     frm.cboDept.DataSource = myDS.Tables(0) 
    End Using 

您可以添加適配器和這樣來跳過代碼的形式。在CBO每個項目將是一個數據庫行對象,但控制將從由DisplayMember指示的列中顯示的數據,在此情況下,「DEPTNAME」

要獲得的值,即DEPTID:

Private Sub cboDept_SelectedValueChanged(sender, e ...) 
    myEmployee.DeptID = Convert.ToInt32(cboDept.SelectedValue) 
End Sub 

使用ValueMember屬性,我們使用SelectedValue屬性從cbo中選擇的數據行中獲取DeptID。數據類型將匹配數據庫列的數據類型。

您可以使用List(Of Dept)做相同的事情,其中​​Dept是您構建的類以顯示名稱,但允許您檢索DeptID。

+0

謝謝Plutonix 你給了我一些偉大的想法;) –

+0

隨時點擊勾選答案 – Plutonix

+0

旁邊不要擔心Plutonix 我會毫不猶豫地點擊對勾,一旦我得到我要的答案。 .. 但我仍然無法找到答案.. 我不認爲VB有這樣的屬性,如訪問 –