Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何将数据从access数据获取到Combobox_Vb.net_Ms Access_Vb.net 2010 - Fatal编程技术网

Vb.net 如何将数据从access数据获取到Combobox

Vb.net 如何将数据从access数据获取到Combobox,vb.net,ms-access,vb.net-2010,Vb.net,Ms Access,Vb.net 2010,为什么我的组合框只显示1项?有人能帮我吗?我想将我的访问数据带到Combobox。您自己的代码不起作用的原因是您只读取了一条记录。你需要一个循环 Public Class AdminP_Time2 Dim conn As OleDbConnection Dim cmd As OleDbCommand Dim sql As String Dim dr As OleDbDataReader Private Sub AdminP_Time2_Load(sen

为什么我的组合框只显示1项?有人能帮我吗?我想将我的访问数据带到Combobox。

您自己的代码不起作用的原因是您只读取了一条记录。你需要一个循环

Public Class AdminP_Time2

    Dim conn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim sql As String
    Dim dr As OleDbDataReader

    Private Sub AdminP_Time2_Load(sender As Object, e As EventArgs) Handles MyBase.Load    
        conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb;Persist Security Info=False;")
        conn.Open() 'opens the connection
        sql = "SELECT * FROM LecturerName"
        cmd = New OleDbCommand(sql, conn)

        dr = cmd.ExecuteReader

        If dr.Read = True Then
            ComboBox1.Text = dr("LecturerName")
        End If 
也就是说,您的代码应该更像这样:

While dr.Read()
    ComboBox1.Items.Add(dr("LecturerName"))
End While

这将把数据加载到
数据表中
,并将其绑定到
组合框
。如果希望能够通过
组合框的
SelectedValue
访问所选记录的PK值,还应设置
组合框的
ValueMember
。您还应该指定要从哪些列检索数据,而不是使用通配符,除非您真正需要每一列。

这里是一个很好的示例

Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb;Persist Security Info=False;"),
      cmd As New OleDbCommand("SELECT * FROM LecturerName", conn)
    conn.Open()

    Using dr As OleDbDataReader = cmd.ExecuteReader()
        Dim tbl As New DataTable

        tbl.Load(dr)

        With ComboBox1
            .DisplayMember = "LecturerName"
            .DataSource = tbl
        End With
    End Using
End Using

您可以从下面的链接中找到所有详细信息


您可能希望在循环中阅读并使用
ComboBox1.Items.Add()
。通过创建、使用和处理连接,特别是DbCOmmand和DataReader对象(如果需要),您将省去一些麻烦。最后2个实际上根本不可重用填充一个数据表,并将其设置为
组合框的
数据源。。。之所以只使用1项,是因为您没有在读卡器中循环。为什么有一个名为“讲师名称”的表和一个名为“讲师名称”的列?当然,您应该有一个名为“讲师”的表和一个名为“名称”的列。将列命名为“讲师名称”是公平的,但不能将表命名为“讲师名称”。
Sub TryThis()

Dim db As DAO.Database
   Dim qdf As DAO.QueryDef
   Dim strSQL As String
   Set db = CurrentDb
   Set qdf = db.QueryDefs("qryStaffListQuery”)

   strSQL = "SELECT tblStaff.* ” & _
                 "FROM tblStaff ” & _
                 "WHERE tblStaff.Office='" & Me.cboOffice.Value & "’ ” & _
                 "AND tblStaff.Department='" & Me.cboDepartment.Value & "’ ” & _
                 "AND tblStaff.Gender='" & Me.cboGender.Value & "’ ” & _
                 "ORDER BY tblStaff.LastName,tblStaff.FirstName;”
End Sub