Подключите выпадающий список Visual Basic к таблицам Access

#vb.net #ms-access #combobox

#vb.net #ms-access #выпадающий список

Вопрос:

Я работаю над Visual Basic Express 2010 и Microsoft Access. Я создал базу данных и отношения с Access, подключил их к VB просто отлично. Моя проблема в том, что у меня есть таблица с именем Address_Table, она содержит только одно поле с именем Address_Name. Таблица Address_Table подключается к таблице_student к полю с именем Student_Address с «Enforcement ссылочной целостности».

Я не могу загружать изображения, мне очень жаль, я действительно пытался.

Проблема № 1: в visual Basic я хочу создать выпадающий список, в котором пользователь выбирает из вариантов, импортированных из Address_Name, а затем, после того, как он нажмет на кнопку добавить, выбор будет добавлен в базу данных в поле Student_Address . Я имею в виду, что Address_Name будет содержать такие значения, как A, B, C. Я хочу, чтобы эти значения отображались в выпадающем списке, и после того, как он выберет одно из них, он нажмет добавить, и выбор будет вставлен в базу данных.

Проблема № 2: Ах, извините, это тоже о выпадающем списке. речь идет о двух выпадающих списках, где при выборе из первого, например, из таблицы country, вы выбираете Америку, а затем в другом выпадающем списке отображаются только штаты Америки. Или, когда вы выбираете Англию, будут отображаться только города Англии и так далее.

* В таблице Country есть одно поле с именем: Country_Name. * Таблица Стипендия содержит поля: стипендия_то, имя_страны_названия, имя_города * В таблице Город указаны поля: имя_города, Страна

* Таблица Стипендия и страна подключены к таблице с именем Student_Info, страна подключена к полю ABC, а стипендия — к новому полю. * Таблица Country, связанная с таблицами Scholarship и City, со следующими полями: Country_Name в таблице Scholarship и Country в таблице City. * Таблица стипендий связана с таблицей City: City_Name с полями Country. Все они имеют «Принудительную ссылочную целостность».

О Боже, я надеюсь, что кто-нибудь меня поймет, я старался предусмотреть все, пожалуйста, помогите мне.

 Public Class frmStudent
Dim cnn As New OleDb.OleDbConnection
 Private Sub RefreshData()
    If Not cnn.State = ConnectionState.Open Then
        'open connection
        cnn.Open()
    End If

    Dim da As New OleDb.OleDbDataAdapter("SELECT Student_ID as [ID], " amp; _
                                         "Student_Name as [Name], Student_Gender, Student_Phone, Student_Address " amp; _
                                         " FROM The_Student ORDER BY Student_ID", cnn)
    Dim dt As New DataTable
    'fill data to datatable
    da.Fill(dt)

    'offer data in data table into datagridview
    Me.dgvData.DataSource = dt

    'close connection
    cnn.Close()
End Sub

 Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
    Dim cmd As New OleDb.OleDbCommand
    If Not cnn.State = ConnectionState.Open Then
        'open connection if it is not yet open
        cnn.Open()
    End If

    cmd.Connection = cnn
    'check whether add new or update
    If Me.txtstdID.Tag amp; "" = "" Then
        'add new 
        'add data to table
        cmd.CommandText = "INSERT INTO The_Student(Student_ID, Student_Name, Student_Gender, Student_Phone)" amp; _
                        " VALUES(" amp; Me.txtstdID.Text amp; ",'" amp; Me.txtStdName.Text amp; "','" amp; _
                        Me.cboGender.Text amp; "','" amp; Me.txtPhone.Text amp; "')"
        cmd.ExecuteNonQuery()
    Else
        'update data in table
        cmd.CommandText = "UPDATE The_Student " amp; _
                    " SET Student_ID=" amp; Me.txtstdID.Text amp; _
                    ", Student_Name='" amp; Me.txtStdName.Text amp; "'" amp; _
                    ", Student_Gender='" amp; Me.cboGender.Text amp; "'" amp; _
                    ", Student_Phone='" amp; Me.txtPhone.Text amp; "'" amp; _
                    ", Student_Address='" amp; Me.txtAddress.Text amp; "'" amp; _
                    " WHERE Student_ID=" amp; Me.txtstdID.Tag
        cmd.ExecuteNonQuery()

    End If
    'refresh data in list
    RefreshData()
    'clear form
    Me.btnClear.PerformClick()

    'close connection
    cnn.Close()
End Sub

Private Sub frmStudent_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    cnn = New OleDb.OleDbConnection
    cnn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" amp; Application.StartupPath amp; "data.mdb"
    '
    'get data into list
    Me.RefreshData()
End Sub
 

Ответ №1:

Здесь есть именно то, что вы ищете. Обычно их называют справочными списками. http://msdn.microsoft.com/en-US/vstudio/bb466226.aspx#formsoverdata

Итак, в частности, видео № 5 должно быть тем, что вы ищете. Поскольку вы используете VB Access, я бы рекомендовал вам отказаться от команд OleDb и использовать строго типизированные наборы данных, адаптеры и т.д., Если только у вас нет веских причин не делать этого. Даже если вы это сделаете, построение поисковых запросов так, как она делает в этих видеороликах, сгенерирует для вас инструкции Insert / Update / Delete, чтобы удовлетворить ограничениям (они являются свойствами адаптеров).

Комментарии:

1. Большое вам спасибо за ссылку, это было очень полезно, но я все еще не мог найти прямого ответа на то, что я ищу. Приведенный выше код с командами OleDb и тому подобное взят из учебника. Я все еще очень рано работаю с Visual Basic, поэтому мне трудно полностью понять ваш комментарий о том, что я должен выбрать или что я должен изменить. Можете ли вы направить меня? Спасибо

2. Ну, пространство имен OleDb содержит набор общих компонентов доступа к данным. Этот подход использует команды и адаптеры данных для выполнения операций с данными. И наоборот, вы можете инициировать строго типизированные объекты ADO, добавив набор данных в свой проект (точно так же, как вы добавили бы форму). После настройки этого набора данных с помощью мастера вы можете использовать его автоматически созданные адаптеры таблиц и источники привязки для подключения вашего пользовательского интерфейса.

3. Видеоряд, который формируется поверх данных, также содержит множество примеров того, как это работает. Стоит изучить оба подхода, но ваш случай звучит как действительно хороший вариант использования для этих типизированных наборов данных, поскольку вам нужны расширенные привязки и поисковые запросы, а у вас еще нет большого опыта.