我有一個用戶表和機構表。我已經與這兩個建立了關系。Inst id 現在作為外鍵出現在用戶表中。
在我的 vb 表單中,我用 inst 表中的機構名稱填充了一個組合框。當我從串列框中選擇用戶名時,他/她的相關詳細資訊將被捕獲到表單上的文本框中。但我不知道如何使用外鍵捕獲機構名稱。
'actions when listbox selection is changed
Private Sub listbox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
cbInst_putData()
cbAccountType_putData()
If gbEditUser.Visible = True Then
Dim selected_item As String = ListBox1.SelectedItem
qr = "Select * FROM [User] WHERE Username = '" & selected_item & "'"
Using cn As New OleDbConnection(cnString)
cn.Open()
Using cmd As New OleDbCommand(qr, cn)
Dim reader As OleDbDataReader = cmd.ExecuteReader
While reader.Read
txtFirstname_edit.Text = reader.Item("Firstname").ToString
txtLastname_edit.Text = reader.Item("Lastname").ToString
txtAddress_edit.Text = reader.Item("Address").ToString
txtPhone_edit.Text = reader.Item("Phone").ToString
Dim dt As Date = Date.Parse(reader.Item("DateofBirth").ToString)
txtdob_edit.Text = dt
txtUsername_edit.Text = reader.Item("Username").ToString
txtPassword_edit.Text = reader.Item("Password").ToString
cbAccountType_edit.SelectedItem = reader.Item("AccountType").ToString
cbInst_edit.Text = reader.Item("InstitutionIDFK").ToString ' this is the combobox for institution list.
txtDesc.Text = reader.Item("Description").ToString
Dim checkActive As String
checkActive = reader.Item("Active").ToString
End While
End Using
cn.Close()
End Using
End If
End Sub
我想將機構名稱存盤在用戶表中,并且還能夠再次捕獲它。我之前沒有建立關系就這樣做了。通過在用戶表中單獨設定一個機構欄位。

我對 vb 很陌生。盡管我一直在查看本網站上的其他問題,但在此處發帖還是全新的。所以如果我的代碼不好并且我沒有正確發布,請原諒我。
uj5u.com熱心網友回復:
假設我的烘焙機是機構,而我的咖啡機是用戶。
我將串列框和組合框系結到 Form.Load 中的資料。
當 ListBox 中的選擇更改時,我們將獲得與選擇關聯的 RoasterId(外鍵)。接下來,我們遍歷 ID 欄位中組合框主鍵中的專案。當我們獲得匹配項時,選擇該專案并退出回圈。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim RoastersSql = "Select * From Roasters;"
Dim CoffeesSql = "Select Top 10 * From Coffees;"
Dim RoastersDT As New DataTable
Dim CoffeeDT As New DataTable
Using cn As New SqlConnection(ConGD)
Using cmd As New SqlCommand(RoastersSql, cn)
cn.Open()
Using reader = cmd.ExecuteReader
RoastersDT.Load(reader)
End Using
End Using
Using cmd As New SqlCommand(CoffeesSql, cn)
Using reader = cmd.ExecuteReader
CoffeeDT.Load(reader)
End Using
End Using
End Using
ListBox1.DisplayMember = "Name"
ListBox1.ValueMember = "ID" 'NOT the RoasterID, this is th PK of the Coffees table
ListBox1.DataSource = CoffeeDT
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "ID"
ComboBox1.DataSource = RoastersDT
UpdateUI(ListBox1.SelectedItem)
End Sub
Private Sub FillTextBoxes(item As Object)
Dim drv = DirectCast(item, DataRowView)
TextBox1.Text = drv("Name").ToString
TextBox2.Text = drv("Type").ToString
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
UpdateUI(ListBox1.SelectedItem)
End Sub
Private Sub UpdateUI(item As Object)
Dim RoasterID = CInt(DirectCast(ListBox1.SelectedItem, DataRowView)("RoasterID"))
For Each item In ComboBox1.Items
Dim ID = CInt(DirectCast(item, DataRowView)("ID"))
If RoasterID = ID Then
ComboBox1.SelectedItem = item
Exit For
End If
Next
FillTextBoxes(ListBox1.SelectedItem)
End Sub
uj5u.com熱心網友回復:
請執行下列操作:
- 確保您創建了關系(一對多)。
- 創建一個新查詢并添加兩個表。
- 在查詢中添加兩個表中的所有欄位(外鍵除外)。
- 使查詢成為您的
Form.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359380.html
