【发布时间】:2016-03-23 00:36:42
【问题描述】:
我的问题是关于将 VB.net 项目连接到 Access DB。 我的表中必须有一个主键,还是有办法改变我的代码不查找 PK?
我弹出一个错误,告诉我我没有主键。现在,如果我将“AdminID”作为我的主键,系统就可以工作了。我只是在询问是否需要这样做?
目前我的组合框显示“AdminID”,而我希望它显示“AdminName”
谢谢。
Dim objConnection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= InfoSystem.accdb")
Dim objAdminDA As New OleDb.OleDbDataAdapter("Select *from tblAdmins", objConnection)
Dim objAdminCB As New OleDb.OleDbCommandBuilder(objAdminDA)
Dim objDataSet As New DataSet()
Public Sub Retrieve()
'Clears DataSet of any existing data
objDataSet.Clear()
'Fills schema - adds table structure information to DataSet
objAdminDA.FillSchema(objDataSet, SchemaType.Source, "tblAdmins")
'Fills DataSet with info from the DataAdapter
objAdminDA.Fill(objDataSet, "tblAdmins")
'Fill the DataSet with info from the Admin table
objAdminDA.FillSchema(objDataSet, SchemaType.Source, "tblAdmins")
objAdminDA.Fill(objDataSet, "tblAdmins")
'Empty combo box
cboxAdmin.Items.Clear()
'Loop through each row, adding the AdminName to the combo box
Dim i As Integer, strAdminID As String
For i = 1 To objDataSet.Tables("tblAdmins").Rows.Count
strAdminID = objDataSet.Tables("tblAdmins").Rows(i - 1).Item("AdminID")
cboxAdmin.Items.Add(strAdminID)
Next
'Select first item in the list
cboxAdmin.SelectedIndex = 0
FillAdminDetails()
End Sub
Public Sub FillAdminDetails()
Dim objRow As DataRow
objRow = objDataSet.Tables("tblAdmins").Rows.Find(cboxAdmin.SelectedItem.ToString)
txtStaffDept.Text = objRow.Item("Department")
txtStaffTitle.Text = objRow.Item("Title")
End Sub
Private Sub cboxAdmin_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboxAdmin.SelectedIndexChanged
FillAdminDetails()
End Sub
End Sub
【问题讨论】:
-
是否有令人信服的理由不进行 PK?
-
数据库设计的整个概念取决于具有 PK 的表。
-
我的表格和其他表格的格式有点矛盾,不是很大的必要性,但会让事情变得更容易一些。出于我自己的好奇心也想更好地理解这段代码。
-
ComboBox 当前显示“AdminID”,我希望它显示我的“AdminName”。但是,AdminID 更适合作为 PK。
-
如果答案解决了您的问题,请单击它旁边的复选标记,以便将其从未回答列表中删除。我提到这一点是因为你还没有接受你得到的任何答案。
标签: .net database vb.net ms-access primary-key